以下代码对常规类型运行良好:
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。
如何使该函数在匿名类型中正常工作?
发布于 2017-07-13 21:04:15
表达式体是一个UnaryExpression,不是因为匿名类型,而是因为该属性是一个值类型,需要作为Expression<Func<object>>的一个object装箱;参见this answer。
可以通过将方法签名更改为接受泛型类型参数来避免这种情况:
public static string GetPropertyName<T>(this Expression<Func<T>> property)https://stackoverflow.com/questions/45090733
复制相似问题