C# 동적 코드 값 가져오기
예를 들어 "BackColor=Color.FromArgb(100100100), BackGroundimage=Image.FromFile(\"XXX\")"
그 중 가장 관건적인 부분은 동적 코드의 값을 얻는 것이다.다음은 동적 코드 값을 가져오는 클래스입니다. 부족한 점은 바로잡아 주십시오.
------------------------------------------------
1
usingMicrosoft.CSharp;
2
usingSystem.Reflection;
3
using
System.CodeDom.Compiler;
4
5
public
static
class
CSharpCodeValueHelper
<
T
>
6
{
7
///
<summary>
8
///
9
///
</summary>
10
private
static
CSharpCodeProvider CSharpCodeProvider {
get
;
set
; }
11
12
///
<summary>
13
///
14
///
</summary>
15
private
static
CompilerParameters CompilerParameters {
get
;
set
; }
16
17
///
<summary>
18
///
19
///
</summary>
20
static
CSharpCodeValueHelper()
21
{
22
CSharpCodeProvider
=
new
CSharpCodeProvider();
23
24
CompilerParameters
=
new
CompilerParameters();
25
CompilerParameters.ReferencedAssemblies.Add(
"
System.dll
"
);
26
CompilerParameters.ReferencedAssemblies.Add(
"
System.Data.dll
"
);
27
CompilerParameters.ReferencedAssemblies.Add(
"
System.Deployment.dll
"
);
28
CompilerParameters.ReferencedAssemblies.Add(
"
System.Drawing.dll
"
);
29
CompilerParameters.ReferencedAssemblies.Add(
"
System.Windows.Forms.dll
"
);
30
CompilerParameters.ReferencedAssemblies.Add(
"
System.Xml.dll
"
);
31
CompilerParameters.GenerateExecutable
=
false
;
32
CompilerParameters.GenerateInMemory
=
true
;
33
}
34
35
///
<summary>
36
///
37
///
</summary>
38
///
<param name="CSharpCode">
CSharpCode
</param>
39
///
<returns>
CSharpCode
</returns>
40
public
static
T GetCodeValue(
string
CSharpCode)
41
{
42
CompilerResults compilerResults
=
CSharpCodeProvider.CompileAssemblyFromSource(CompilerParameters, CreateCode(CSharpCode));
43
44
if
(compilerResults.Errors.HasErrors)
45
{
46
string
errorString
=
string
.Empty;
47
errorString
+=
"
:
"
;
48
foreach
(CompilerError err
in
compilerResults.Errors)
49
{
50
errorString
+=
err.ErrorText
+
"
"
;
51
}
52
throw
new
Exception(errorString);
53
}
54
else
55
{
56
//
, DynamicClass
57
Assembly assembly
=
compilerResults.CompiledAssembly;
58
object
dynamicClass
=
assembly.CreateInstance(
"
DynamicNamespace.DynamicClass
"
);
59
MethodInfo methodInfo
=
dynamicClass.GetType().GetMethod(
"
GetValue
"
);
60
61
return
(T)methodInfo.Invoke(dynamicClass,
null
);
62
}
63
}
64
65
///
<summary>
66
///
67
///
</summary>
68
///
<param name="CSharpCode">
CSharpCode
</param>
69
///
<returns>
</returns>
70
private
static
string
CreateCode(
string
CSharpCode)
71
{
72
StringBuilder strBuilder
=
new
StringBuilder();
73
strBuilder.AppendLine(
"
using System;
"
);
74
strBuilder.AppendLine(
"
using System.Collections.Generic;
"
);
75
strBuilder.AppendLine(
"
using System.ComponentModel;
"
);
76
strBuilder.AppendLine(
"
using System.Data;
"
);
77
strBuilder.AppendLine(
"
using System.Drawing;
"
);
78
strBuilder.AppendLine(
"
using System.Text;
"
);
79
strBuilder.AppendLine(
"
using System.Windows.Forms;
"
);
80
81
strBuilder.AppendLine(
"
namespace DynamicNamespace
"
);
82
strBuilder.AppendLine(
"
{
"
);
83
strBuilder.AppendLine(
"
public class DynamicClass
"
);
84
strBuilder.AppendLine(
"
{
"
);
85
strBuilder.AppendLine(
"
public object GetValue()
"
);
86
strBuilder.AppendLine(
"
{
"
);
87
strBuilder.AppendLine(
"
return
"
+
CSharpCode
+
"
;
"
);
88
strBuilder.AppendLine(
"
}
"
);
89
strBuilder.AppendLine(
"
}
"
);
90
strBuilder.AppendLine(
"
}
"
);
91
92
string
code
=
strBuilder.ToString();
93
return
code;
94
}
95
}
96
97
98
99
100
다음은 호출입니다. (호출할 때 특수 문자의 뜻을 주의하십시오.)
1
Color coor
=
CSharpCodeValueHelper
<
Color
>
.GetCodeValue(
"
Color.FromArgb(100,100,100)
"
);
2
3
4
Image img
=
CSharpCodeValueHelper
<
Image
>
.GetCodeValue(
"
Image.FromFile(\"C:\\\\tu.jpg\")
"
);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
비안의 속성을 반사하여 검사합니다최근에 인터페이스를 쓰고 있는데, 매개 변수는 하나의 대상으로 수신된다.객체의 등록 정보를 판단하려면 필수 항목이 필요합니다. 1、모든 속성명 획득 2. 속성 중의 값을 획득 3. 속성이null인지 판단...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.