【问题标题】:Convert string to executable c# code in code-behind [duplicate]在代码隐藏中将字符串转换为可执行的c#代码[重复]
【发布时间】:2013-01-23 17:02:01
【问题描述】:

可能重复:
Execute a string in C# 4.0

我怎样才能让这个字符串执行:

string dt = "DateTime.Now";

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

lbl.Text = dt;

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    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);
    }
    

    所以你可以调用:

    var result = Execute("DateTime.Now");
    

    【讨论】:

      猜你喜欢
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2012-12-10
      • 2019-05-18
      • 2011-03-09
      • 1970-01-01
      • 2016-09-24
      相关资源
      最近更新 更多