1

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" が渡された単純な古いリフレクション コールです。より良い方法はありますか?

4

1 に答える 1