如何动态执行语句?

hastone 2006-05-20 12:56:02
在用ASP的时候我习惯使用:
dim a,b,c
a=1
b=2
c=eval(cstr(a)+"+"+cstr(b))
请问在ASP.NET环境中如何实现?
...全文
240 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hastone 2006-05-20
  • 打赏
  • 举报
回复
我在线等,麻烦高手帮忙,谢谢~!
hastone 2006-05-20
  • 打赏
  • 举报
回复
谢谢楼上的我自己调整了一下语句,补充了一下USING~!

using System;
using System.Data;
using System.Web;
//增加『
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
using System.Text;
//』增加

public static object api_run(string rs)
{
StringBuilder crs = new StringBuilder();
ICodeCompiler coms = (new CSharpCodeProvider().CreateCompiler());
CompilerParameters coms_ = new CompilerParameters();
coms_.GenerateExecutable = false;
coms_.GenerateInMemory = true;

crs.Append("public class api_runtime\n");
crs.Append("{\n");
crs.Append(" public object api_runsc()\n");
crs.Append(" {\n");
crs.Append(" return " + rs + ";\n");
crs.Append(" }\n");
crs.Append("}");

CompilerResults comres= coms.CompileAssemblyFromSource(coms_, crs.ToString());
Assembly ass = comres.CompiledAssembly;

object asseval = ass.CreateInstance("api_runtime");
MethodInfo method = asseval.GetType().GetMethod("api_runsc");
object reobj = method.Invoke(asseval, null);

GC.Collect();
return reobj;

}
huyanjiang 2006-05-20
  • 打赏
  • 举报
回复
这是一个执行表达式的代码,可以参考一下
/// <summary>
/// 接受一个string类型的表达式并计算结果,返回一个object对象,静态方法
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
public static object Calculate(string expression)
{
string className = "Calc";
string methodName = "Run";
expression = expression.Replace("/", "*1.0/");

// 创建编译器实例。
ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler());

// 设置编译参数。
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true;

// 创建动态代码。
StringBuilder classSource = new StringBuilder();
classSource.Append("public class " + className + "\n");
classSource.Append("{\n");
classSource.Append(" public object " + methodName + "()\n");
classSource.Append(" {\n");
classSource.Append(" return " + expression + ";\n");
classSource.Append(" }\n");
classSource.Append("}");

// 编译代码。
CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());

// 获取编译后的程序集。
Assembly assembly = result.CompiledAssembly;

// 动态调用方法。
object eval = assembly.CreateInstance(className);
MethodInfo method = eval.GetType().GetMethod(methodName);
object reobj = method.Invoke(eval, null);
GC.Collect();
return reobj;
}

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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