在代码隐藏中将字符串转换为可执行的 c# 代码 [英] Convert string to executable c# code in code-behind

查看:18
本文介绍了在代码隐藏中将字符串转换为可执行的 c# 代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

How can I get this string to execute:

string dt = "DateTime.Now";

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

...so that this would result in today's date being displayed?:

lbl.Text = dt;

推荐答案

Codedom 的解决方案:

Solution with Codedom:

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

    builder.Append("using System;");
    builder.Append("
namespace Lab");
    builder.Append("
{");
    builder.Append("
public sealed class Cal");
    builder.Append("
{");
    builder.Append("
public static object Execute()");
    builder.Append("
{");
    builder.AppendFormat("
return {0};", content);
    builder.Append("
}");
    builder.Append("
}");
    builder.Append("
}");

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

这篇关于在代码隐藏中将字符串转换为可执行的 c# 代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆