C# 从表达式中获取匿名类型属性的属性名
以下代码适用于常规类型:C# 从表达式中获取匿名类型属性的属性名,c#,.net,lambda,expression,C#,.net,Lambda,Expression,以下代码适用于常规类型: public static string GetPropertyName(this Expression<Func<object>> property) { MemberExpression member = property.Body as MemberExpression; PropertyInfo propInfo = member.Member as PropertyInfo;
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"
公共静态字符串GetPropertyName(此表达式属性)
{
MemberExpression member=property.Body作为MemberExpression;
PropertyInfo-propInfo=成员。成员为PropertyInfo;
返回propInfo.Name;
}
GetPropertyName(()=>obj.MyProperty)//返回“MyProperty”
但是,如果您从匿名类型向它传递属性,它将抛出null引用异常,因为表达式体是一个UnaryExpression而不是MemberExpression
如何使此函数在匿名类型下正常工作?表达式主体是
UnaryExpression
,这不是因为匿名类型,而是因为属性是一种值类型,需要作为表达式的对象
装箱;看
通过将方法签名更改为采用泛型类型参数,可以避免这种情况:
public static string GetPropertyName<T>(this Expression<Func<T>> property)
公共静态字符串GetPropertyName(此表达式属性)
表达式主体是一个UnaryExpression
,这不是因为匿名类型,而是因为属性是一个值类型,需要为您的表达式作为对象
装箱;看
通过将方法签名更改为采用泛型类型参数,可以避免这种情况:
public static string GetPropertyName<T>(this Expression<Func<T>> property)
公共静态字符串GetPropertyName(此表达式属性)