0
간단한 정적 메서드를 사용하여 개체를 반환하여 식을 동적으로 평가하려고합니다. 나는 여기 예제에 설명 된 조언을 따랐다 : http://www.blackwasp.co.uk/RuntimeCompilation_2.aspx 기본 표현식에 대해서는 정상적으로 작동하지만, .Contains() 메소드를 사용하는 경우에는 예외가 발생한다.CodeDom 동적 메서드에서 목록 전달 및 사용
근무 전화 :
Console.WriteLine(DynamicCodeUtils.TestExpression("1 == 1 && (2 == 3 || 2 == 2) && 4 == 5");
Output: false
Console.WriteLine(DynamicCodeUtils.TestExpression("Math.Max(100,200)"));
Output: 200
비 작동 전화 :
string _ArrayCheck = "\"1,2,3\".Split(',').ToArray().Contains(\"1\")";
Console.WriteLine(DynamicCodeUtils.TestExpression(_ArrayCheck));
Throws an exception - expected output would be "true"
코드 :
public static object TestExpression(string Expression)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Xml.dll");
parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");
CompilerResults results = provider.CompileAssemblyFromSource(parameters, GetCode(Expression));
var cls = results.CompiledAssembly.GetType("DynamicNS.DynamicCode");
var method = cls.GetMethod("DynamicMethod", BindingFlags.Static | BindingFlags.Public);
return method.Invoke(null, null);
}
public static string[] GetCode(string Expression)
{
return new string[]
{
@"
using System;
using System.Linq;
namespace DynamicNS
{
public static class DynamicCode
{
public static object DynamicMethod()
{
return " + Expression + @";
}
}
}"
};
}
정말 고맙습니다. 수많은 참조를 추가/삭제하려고 시도했지만 올바른 조합을 찾을 수 없었습니다. 이제 완벽하게 작동합니다. – spotvader