我可以将下面的方法修改以使得 lambda 表达式引用实际实例自身时也能正常工作,您需要使用以下代码,而不是:
x => x.Name
表达式是
x => x
如果我有一个类“Car”,我可以返回字符串“Car”,而不仅仅是操作它的属性(例如Car.Colour)。
这个方法:
public static string GetMemberName(Expression expression)
{
if (expression is LambdaExpression)
expression = ((LambdaExpression)expression).Body;
if (expression is MemberExpression)
{
var memberExpression = (MemberExpression)expression;
if (memberExpression.Expression.NodeType ==
ExpressionType.MemberAccess)
{
return GetMemberName(memberExpression.Expression)
+ "."
+ memberExpression.Member.Name;
}
return memberExpression.Member.Name;
}
if (expression is UnaryExpression)
{
var unaryExpression = (UnaryExpression)expression;
if (unaryExpression.NodeType != ExpressionType.Convert)
throw new Exception(string.Format(
"Cannot interpret member from {0}",
expression));
return GetMemberName(unaryExpression.Operand);
}
throw new Exception(string.Format(
"Could not determine member from {0}",
expression));
}
我希望你能够提供一些类似以下的东西:
if (expression is SomeExpressionThatReturnsAnInstance)
{
return (name of type of instance);
}
object
而不是property
,是吗? - Dhrumil