在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中可能吗?

在ASP.NET 5中以代码形式动态执行字符串(eval)

您可以使用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.