- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
private static bool EvaluteExpression(string expression, out object result)
{
string source =
string.Format("public static class Evalutor{{public static object GetValue(){{return {0};}}}}",
expression);
using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
{
System.CodeDom.Compiler.CompilerParameters compilerParams =
new System.CodeDom.Compiler.CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false
};
System.CodeDom.Compiler.CompilerResults compileResults = provider.CompileAssemblyFromSource(compilerParams, source);
if (compileResults.NativeCompilerReturnValue == 0)
{
Type type = compileResults.CompiledAssembly.GetType("Evalutor");
MethodInfo method = type.GetMethod("GetValue");
result = method.Invoke(null, null);
return true;
}
}
result = null;
return false;
}
guest 07.12.2009 13:23 # 0
exe-dealer 07.12.2009 13:30 # 0
shapigor 07.12.2009 14:07 # 0
А вот компайлер - как-то стремно.
Хоть бы какое-нить подобие кэширования сделали, что-ли...
exe-dealer 07.12.2009 14:44 # 0
shapigor 07.12.2009 17:04 # 0
exe-dealer 07.12.2009 18:17 # 0
поддерживаемые типы: все числовые, булевы и строки
guest 15.12.2009 18:31 # 0
guest 29.12.2009 15:22 # 0
a immeno tak