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”。有没有更好的办法?