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 = ??
在第二种情况下k.Body
是这样的ArrayLength(l)
。
我可以用这样的黑客来做到这一点:
var member = (k.Body as UnaryExpression).Operand.Type.GetProperty("Length");
但这感觉不像是一种直截了当的表达方式。它更像是一个普通的旧反射调用,其中传递了脏字符串“Length”。有没有更好的办法?