List<LambdaExpression>
にExpression<Func<T, returnT>>
の異なるオブジェクトが配置され、実行時にdynamic
を使用してExpression<Func<T, returnT>>
を受け入れるメソッドと一致する作業コードがあります。これは初めてのdynamic
の使用でしたが、私はその役割や機能を十分に理解していると感じています。私が興味を持っているのは、LambdaExpression
からExpression<Func<T, returnT>>
への関係/解像度です。コードは以下である: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 Dispatch *を検索してください。たとえば、ここでは[動的言語ランタイムの概要](https://msdn.microsoft.com/en-us/library/dd233052(v = vs.110).aspx) –
Thxです。私はそれがダイナミックなディスパッチであることを知っていましたが、私はこのインスタンスでダイナミックの振る舞いが 'LambdaExpression'とやや排他的だと思ったと思います。もう少し読んだら、今はそうではないと思う。 –