Некоторые проблемы с UnaryExpression
s.Как получить MemberInfo из выражений типа ArrayLength?
Это работает так:
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
. Но это немного сложно с . Как бы я получить 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");
но это не чувствует, как прямой экспрессии подход вперед. Это более простой старый звонок с грязной струной «Длина». Есть ли способ лучше?
Я хочу знать, как получить 'PropertyInfo' из свойства' Length' из 'l.Length' части выражения. Как получить это из метода Expression.ArrayLength? – nawfal
@nawfal: Это не свойство, поэтому там * нет * такой 'PropertyInfo'. –
Я думаю, это свойство. Например, я могу получить 'PropertyInfo' типичного' int []. Length 'like' typeof (int []). GetProperty («Длина») '. – nawfal