如果将字符串的内容作为代码执行

qiang119 2008-04-01 09:01:14
例如:b="string a;";
如何 通过执行变量b 从而达到程序自动定义变量a ???
...全文
87 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sx_lxh 2008-04-01
  • 打赏
  • 举报
回复
动态编译。
例:获取字符串所表示的逻辑意义

/*****************************************************************
** 文件名: Eval.cs
** Copyright (c) 1999 -2003
** 创建人: Phoenix
** 创建日期:
** 修改人:
** 修改日期:
** 描 述: 获取字符串所表示的逻辑意义
** 版 本:1.0
******************************************************************/


public class Eval
{
public static object GetValue(string value)
{
string codeSnippet = "using System; " + "\r\n" +
"namespace CzG {" + "\r\n" +
" public class Eval" + "\r\n" +
" {" + "\r\n" +
" public Eval(){} " + "\r\n" +
" public object GetValue()" + "\r\n" +
" {" + "\r\n" +
" return " + value + ";" + "\r\n" +
" }" + "\r\n" +
" } }";

CodeSnippetCompileUnit unit = new CodeSnippetCompileUnit(codeSnippet);
CodeDomProvider compiler=new CSharpCodeProvider() ;
//ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler();
string[] referenceAssemblies={"System.dll"};
CompilerParameters para = new CompilerParameters(referenceAssemblies ,"Eval.dll",false );
//para.ReferencedAssemblies.Add("System.dll");
para.GenerateInMemory = true;
para.GenerateExecutable = false;
//para.OutputAssembly = "Eval.dll";

Assembly asm = compiler.CompileAssemblyFromDom(para, unit).CompiledAssembly;

Type type = asm.GetType("CzG.Eval");
MethodInfo mi = type.GetMethod("GetValue", BindingFlags.Public | BindingFlags.Instance);

object obj = asm.CreateInstance("CzG.Eval");
object ret = mi.Invoke(obj, null);
return ret;


}
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧