在C#中,没有内置的eval函数。但是可以使用诸如反射、动态编译等技术来实现类似的功能。以下是一种安全高效地使用eval的方法:
using System;
using System.Reflection;
public class EvalExample
{
public static object Eval(string code)
{
Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType("YourNamespace.YourClass");
object instance = Activator.CreateInstance(type);
MethodInfo method = type.GetMethod("YourMethod");
return method.Invoke(instance, new object[] { code });
}
}
using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
public class EvalExample
{
public static object Eval(string code)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.ReferencedAssemblies.Add("System.dll");
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
Assembly assembly = results.CompiledAssembly;
Type type = assembly.GetType("YourNamespace.YourClass");
object instance = Activator.CreateInstance(type);
MethodInfo method = type.GetMethod("YourMethod");
return method.Invoke(instance, null);
}
}
无论使用哪种方法,都需要谨慎对待eval功能,确保输入的代码是可信的,以防止恶意代码执行。
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读: c#中begininvoke报错怎么解决