The*_*rer 0 .net c# lambda expression
以下代码适用于常规类型:
public static string GetPropertyName(this Expression<Func<object>> property)
{
MemberExpression member = property.Body as MemberExpression;
PropertyInfo propInfo = member.Member as PropertyInfo;
return propInfo.Name;
}
GetPropertyName(() => obj.MyProperty); //Returns "MyProperty"
Run Code Online (Sandbox Code Playgroud)
但是,如果您将匿名类型的属性传递给它,它会引发空引用异常,因为表达式主体是 UnaryExpression 而不是 MemberExpression。
如何使此函数对匿名类型正常工作?
表达式主体UnaryExpression
不是因为匿名类型,而是因为属性是一个值类型,需要装箱object
为您的Expression<Func<object>>
; 看到这个答案。
您可以通过更改方法签名以采用泛型类型参数来避免这种情况:
public static string GetPropertyName<T>(this Expression<Func<T>> property)
Run Code Online (Sandbox Code Playgroud)