繁体   English   中英

C# 表达式树,使用带有 static 类型表达式的表达式用于 lambda 调用

[英]C# Expression tree, using expression with static type of expression for lambda invocation

我一直试图在以下代码中使字典值通用。 我想使用Expression作为字典键,而不是Expression<Action> 如果我将代码更改为使用Expression ,则会出现错误。 如果解决方案涉及Expression.Convert那就太好了,这样我就不会尝试通过添加Action作为通用参数来使Expression通用。

Expression<Action> test = () => Console.WriteLine("Hello world");

var dict = new Dictionary<string, Expression<Action>> {["foo"] = test};

var functionDef = Expression.Property(Expression.Constant(dict), "Item", Expression.Constant("foo"));

var intermediate = Expression.Lambda(functionDef);

Expression.Invoke(Expression.Invoke(Expression.Constant(intermediate)));

如果我使用泛型Expression而不是Expression<Action>作为字典类型,则会出错:

未处理的异常。 System.ArgumentException:无法调用“System.Linq.Expressions.Expression”类型的表达式(参数“表达式”)

我不确定你的问题是什么,但也许你不需要表达。

这是一个无表达式的示例:

var d = new Dictionary<string, Action<string>>() 
{
    { "hello", name => Console.WriteLine($"Hello {name}") },
    { "bye", name => Console.WriteLine($"Bye {name}!. Have a great day!") }
};

d["hello"]("Node.JS");
d["bye"]("Node.JS");

这打印:

Hello Node.JS
Bye Node.JS!. Have a great day!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM