在下面的代码中,我一直在努力使字典值通用。我想使用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"类型的表达式(参数"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!