在ASP.NET 5中以代码形式动态执行字符串(eval)
本文关键字:执行 动态 字符串 eval NET ASP 代码 | 更新日期: 2023-09-27 18:27:43
有没有一种方法可以用Roslyn在ASP.NET 5中以C#代码的形式执行字符串?
在我的例子中,我想动态地将字符串转换为linq表达式。
例如:
obj.SomeFunc( "x => x.Username".ToLinqExpression() );
或者类似于:
Eval("obj.SomeFunc(x => x.Username); ");
这在ASP.NET 5中可能吗?
您可以使用Roslyn脚本执行类似的操作。例如:
public class Globals
{
public ObjType obj;
}
…
CSharpScript.EvaluateAsync(
"obj.SomeFunc(x => x.Username)", globals: new Globals { obj = obj });
如前所述,您可以尝试Dynamic Linq。我曾经根据动态属性生成排序,它似乎运行得很好。
计算字符串需要编译,并且可以使用表达式类和编译委托轻松构建表达式树
表达式类在系统命名空间中。
以下是几种方法:
static Func<int, int, int, int, int> delInt = (i, j, k, l) => i + j * k - l;
int rslt1 = delInt(2, 3, 4, 5); // evaluates lambda and returns int
static Func<int> delInt1 = () => 2 + 3 * 4 - 5; // type the expression after => instead of assigning it to a string.
int rslt2 = delInt1(); // takes no parameters and returns int result.