c# - 在 C# 中从字符串创建匿名方法

标签 c# anonymous-methods

是否可以在 C# 中从字符串创建匿名方法?

例如如果我有一个字符串 "x + y * z" 是否可以将其转换为某种方法/lambda 对象,我可以用任意 x,y,z 参数?

最佳答案

这是可能的,是的。您必须解析字符串,例如,使用表达式树编译委托(delegate)。

下面是一个使用表达式树创建 (x, y, z) => x + y * z 的例子:

ParameterExpression parameterX = Expression.Parameter(typeof(int), "x");
ParameterExpression parameterY = Expression.Parameter(typeof(int), "y");
ParameterExpression parameterZ = Expression.Parameter(typeof(int), "z");
Expression multiplyYZ = Expression.Multiply(parameterY, parameterZ);
Expression addXMultiplyYZ = Expression.Add(parameterX, multiplyYZ);
Func<int,int,int,int> f = Expression.Lambda<Func<int, int, int, int>>
(
    addXMultiplyYZ,
    parameterX,
    parameterY,
    parameterZ
).Compile();
Console.WriteLine(f(24, 6, 3)); // prints 42 to the console

关于c# - 在 C# 中从字符串创建匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574845/

相关文章:

c# - Linq Group By 两个可能不同或相同的属性

c# - 返回任何一年的开始和结束

c# - 如何配置部署在 IIS 和远程客户端上的 WCF 服务以从远程客户端 PC 进行身份验证?

c# - 在 c# 中,我如何建立从 A 到 ZZ 的数组,这类似于 excel 对列进行排序的方式

.net - 将 Linq/Lambda 表达式转换为匿名方法

c# - 匿名方法 - C# 到 VB.NET

c# - C# 事件处理程序委托(delegate)中的闭包?

delphi - 'initialization' 部分中匿名方法的奇怪错误

delphi - 匿名方法的范围

c# - 使用 jquery 和处理程序 (ashx) 上传文件时出现“未找到”错误