C#如何解释执行一段字符串
s字符串本身就是一段代码像这样strings1=\"o\";strings="strings1=\"k\";s1+s2;"如何把这个s解释执行呢最好能够把最后一个表达式作...
s字符串本身就是一段代码
像这样string s1=\"o\";string s ="string s1=\"k\";s1+s2;"
如何把这个s解释执行呢
最好能够把最后一个表达式作为返回值
刚才问了一个类似的问题
用到了编译器的那个类,那个类我一直没有弄明白,就是有字符串就编译不出来了,怎么办呢
这里有类似的代码,希望作者能够来回答,非常感谢 展开
像这样string s1=\"o\";string s ="string s1=\"k\";s1+s2;"
如何把这个s解释执行呢
最好能够把最后一个表达式作为返回值
刚才问了一个类似的问题
用到了编译器的那个类,那个类我一直没有弄明白,就是有字符串就编译不出来了,怎么办呢
这里有类似的代码,希望作者能够来回答,非常感谢 展开
展开全部
动态编译技术,下面的 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))
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
{
using System;
public class C
{
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询