sとのトラブルUnaryExpression
。
これは次のように機能します。
Expression<Func<List<string>, object>> k = l => l.Count;
//got member in this case like this
var member = ((k.Body as UnaryExpression).Operand as MemberExpression).Member;
上記の場合、k.Body.NodeType
は でしたExpressionType.Convert
。しかし、それは少しトリッキーExpressionType.ArrayLength
です。以下の場合、どうすればPropertyInfo
member
同様に取得できますか?:
Expression<Func<string[], int>> k = l => l.Length;
var member = ??
2番目のケースk.Body
では、のようなものArrayLength(l)
です。
私はこのようなハックでそれを行うことができます:
var member = (k.Body as UnaryExpression).Operand.Type.GetProperty("Length");
しかし、これは単純な表現アプローチとは思えません。これは、ダーティな文字列 "Length" が渡された単純な古いリフレクション コールです。より良い方法はありますか?