c# - C# 表达式树,使用具有静态表达式类型的表达式进行 lambda 调用
问题描述
我一直试图在以下代码中使字典值通用。我想Expression
用作字典键而不是Expression<Action>
. 如果我更改要使用的代码,Expression
则会出现错误。如果解决方案涉及,那就太好了,Expression.Convert
所以我不会试图Expression
通过添加Action
作为通用参数来制作通用。
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!
推荐阅读
- android - Android 资源链接失败:安装 Android Studio 3.2 窗口时
- scala - junit 的 BeforeClass 注释在 scala 的顶级对象中如何表现?
- azure - 无法通过 arm 模板将站点扩展添加到 azure web 应用程序
- function - 循环遍历R中数据集中的列
- excel - 复制和粘贴单元格以偏移查找的宏
- sql - 匹配具有特定 ID 的记录
- java - 没有环境变量的 Google Api 翻译认证
- javascript - 如何使用打字稿在猫鼬模型中定义自定义查询助手?
- python - 在 Python 中的类列表中查找特定项目
- java - 如何设置 JTextField 的大小和位置?