[英]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.