以下代码适用于常规类型:
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"
但是,如果从匿名类型传递属性,则会抛出空引用异常,因为表达式主体是UnaryExpression而不是MemberExpression。
如何使此功能适用于匿名类型?
答案 0 :(得分:4)
表达式正文是UnaryExpression
,不是因为匿名类型,而是因为该属性是一个值类型,需要为object
加Expression<Func<object>>
;见this answer。
您可以通过更改方法签名来采用泛型类型参数来避免这种情况:
public static string GetPropertyName<T>(this Expression<Func<T>> property)