【发布时间】:2016-10-25 19:40:56
【问题描述】:
我有一些工作代码,其中不同类型的Expression<Func<T, returnT>> 对象放在List<LambdaExpression> 中,然后在运行时通过使用dynamic 与接受Expression<Func<T, returnT>> 的方法匹配。这是我第一次使用dynamic,但我觉得我足够了解它的作用/功能。我很好奇的是从LambdaExpression 到Expression<Func<T, returnT>> 的关系/分辨率。代码如下:
public void DoIt(Expression<Func<Record, string>> expr) { ... }
public void DoIt(Expression<Func<Record, int?>> expr) { ... }
public void DoIt(Expression<Func<Record, DateTime?>> expr) { ... }
public class Record {
public string Member1;
public int? Member2;
public DateTime? Member3;
}
Expression<Func<Record, string>> expr1 = r => r.Member1;
Expression<Func<Record, int?>> expr2 = r => r.Member2;
Expression<Func<Record, DateTime?>> expr3 = r => r.Member3;
var myList = new List<LambdaExpression>() {
expr1, expr2, expr3
};
//later...
foreach (var expr in myList)
{
DoIt((dynamic) expr);
//What is happening w/ this LambdaExpression obj
//so that it dispatches the appropriate DoIt method?
}
【问题讨论】:
-
搜索动态调度。例如这里Dynamic Language Runtime Overview
-
谢谢。我知道这是动态调度,但我想我认为在这种情况下动态的行为在某种程度上是
LambdaExpression独有的。在阅读了更多关于它之后,现在我发现它不是。
标签: c# linq generics dynamic lambda