在代码隐藏中将字符串转换为可执行的c#代码

Str*_*ped 3 c# asp.net webforms

可能重复:
在C#4.0中执行字符串

我怎样才能执行此字符串:

string dt = "DateTime.Now";
Run Code Online (Sandbox Code Playgroud)

......这样会导致今天的日期显示?:

lbl.Text = dt;
Run Code Online (Sandbox Code Playgroud)

cuo*_*gle 7

Codedom解决方案:

private static string CreateExecuteMethodTemplate(string content)
{
    var builder = new StringBuilder();

    builder.Append("using System;");
    builder.Append("\r\nnamespace Lab");
    builder.Append("\r\n{");
    builder.Append("\r\npublic sealed class Cal");
    builder.Append("\r\n{");
    builder.Append("\r\npublic static object Execute()");
    builder.Append("\r\n{");
    builder.AppendFormat("\r\nreturn {0};", content);
    builder.Append("\r\n}");
    builder.Append("\r\n}");
    builder.Append("\r\n}");

    return builder.ToString();
}

private static object Execute(string content)
{
    var codeProvider = new CSharpCodeProvider();
    var compilerParameters = new CompilerParameters
    {
        GenerateExecutable = false,
        GenerateInMemory = true
    };

    compilerParameters.ReferencedAssemblies.Add("system.dll");

    string sourceCode = CreateExecuteMethodTemplate(content);
    CompilerResults compilerResults = codeProvider.CompileAssemblyFromSource(compilerParameters, sourceCode);
    Assembly assembly = compilerResults.CompiledAssembly;
    Type type = assembly.GetType("Lab.Cal");
    MethodInfo methodInfo = type.GetMethod("Execute");

    return methodInfo.Invoke(null, null);
}
Run Code Online (Sandbox Code Playgroud)

所以你可以打电话:

var result = Execute("DateTime.Now");
Run Code Online (Sandbox Code Playgroud)