我正在尝试弄清楚如何将所有部分组合在一起,并希望提供一个具体的源代码示例来开始简单的情况。
考虑以下C#代码:
Func<int, int, int> f = (x, y) => x + y;
我可以使用表达式树在运行时生成一个等效的函数,如下所示:
var x = Expression.Parameter(typeof(int), "x");
var y = Expression.Parameter(typeof(int), "y");
Func<int, int, int> f =
Expression.Lambda<Func<int, int, int>>(
Expression.Add(x, y),
new[] { x, y }
).Compile();
现在给定以下的lambda表达式:
Func<dynamic, dynamic, dynamic> f = (x, y) => x + y;
我应该如何使用表达式树(以及可能的 Expression.Dynamic
)生成相应的等价代码?
private void Foo(string s) { } public void Foo(object o) { }
,在类内部调用字符串的Foo将选择字符串重载,在类外部将选择对象重载。 - Quartermeister