Некоторые проблемы с UnaryExpression
s.
Это работает следующим образом:
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 = ??
Во втором случае k.Body
есть что-то вроде ArrayLength(l)
.
Я могу сделать это с помощью взлома:
var member = (k.Body as UnaryExpression).Operand.Type.GetProperty("Length");
, но это не похоже на прямой подход к выражению. Это более простой старый звонок с грязной струной "Длина". Есть ли лучший способ?