C#如何解释执行一段字符串

s字符串本身就是一段代码像这样strings1=\"o\";strings="strings1=\"k\";s1+s2;"如何把这个s解释执行呢最好能够把最后一个表达式作... s字符串本身就是一段代码
像这样string s1=\"o\";string s ="string s1=\"k\";s1+s2;"
如何把这个s解释执行呢
最好能够把最后一个表达式作为返回值
刚才问了一个类似的问题
用到了编译器的那个类,那个类我一直没有弄明白,就是有字符串就编译不出来了,怎么办呢
这里有类似的代码,希望作者能够来回答,非常感谢
展开
 我来答
OAngs
推荐于2017-11-25 · TA获得超过678个赞
知道小有建树答主
回答量:554
采纳率:66%
帮助的人:364万
展开全部
动态编译技术,下面的 StringBuilder 就是叠加字符串为一个类:
using System;
public class C
{
public static void T()
{

//Code

}
}

然后将它进行动态编译后,反射他的 C 类,然后在得到他的 T 方法,然后就可以通过这个反射结果去执行 T 方法了。你如果需要一个有返回值的动态编辑一节,如返回一个字符串,那么你要将:

public static void T(){ 改成 public static string T(){

如果需要想他传递一个参数,那么就要接到 public static string T(string str)
这样动态编译才会有返回结果和返回值,当然,你传入的必须也是同类型的,返回值也必须按要求来返回,不然执行的时候会报错。

比如:

using System;
public class C
{
public static string T(int a,int b)
{

//Code

}
}

StringBuilder 叠加出来的字符串是这样(Code 部分为传入的代码,下面将写 Code 文本内容)

Code="int c = a+b;return c.ToString()";

然后将 Code 作为 BuildCode 的参数传入即可(注意要将 public static void T(){ 改为 public static string T(int a,int b))
追问
是不是只要能够运行出来的类(单独的,没有其他类的引用)文件都可以这样编译呢?
追答
有其他类的也可以,你可以在里面做引用,接口也好,动态引用也好,都可以~
这写文本,其实就跟你单独写一个 .cs 文件一样~
匿名用户
2013-05-25
展开全部

带返回值的代码如下,你可以自行将两份代码合并一下。

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Text;
namespace Execute
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "string s1=\"o\";string s2=\"k\";return s1+s2;";
            Object ret = Execute(s);
            Console.WriteLine(ret);
            Console.ReadKey();
        }
        static Object Execute(String code)
        {
            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            CompilerResults results = provider.CompileAssemblyFromSource(parameters, BuildCode(code));
            MethodInfo methodInfo = results.CompiledAssembly.GetType("C").GetMethod("T");
            return methodInfo.Invoke(null, null);
        }
        static String BuildCode(String code)
        {
            StringBuilder builder = new StringBuilder();
            builder.Append("using System;");
            builder.Append("public class C{ public static Object T(){");
            builder.Append(code);
            builder.Append("}}");
            return builder.ToString();
        }
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-26
展开全部
动态编译技术,下面的 StringBuilder 就是叠加字符串为一个类:
using System;
public class C
{
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式