获取 属性 名称的扩展方法
Extension method to get property name
我有一个扩展方法来获取 属性 name as
public static string Name<T>(this Expression<Func<T>> expression)
{
MemberExpression body = (MemberExpression)expression.Body;
return body.Member.Name;
}
我称它为
string Name = ((Expression<Func<DateTime>>)(() => this.PublishDateTime)).Name();
这工作正常,returns 我 PublishDateTime
作为字符串。
但是调用语句有问题,它看起来太复杂了,我想要这样的东西。
this.PublishDateTime.Name()
有人可以修改我的扩展方法吗?
对于 C# 6.0,您可以使用:
nameof(PublishDateTime)
你不能这样做 this.PublishDateTime.Name()
,因为唯一会传递到扩展方法的是你调用扩展方法的值或引用。
无论是 属性、字段、局部变量还是方法结果都没有关系,它不会有一个您可以在扩展方法中访问的名称。
表达式将是"verbose",见
How can I add this method as an extension method to properties of my class? (thanks ) 将其放入静态助手 class.
试试这个:
public static string Name<T,TProp>(this T o, Expression<Func<T,TProp>> propertySelector)
{
MemberExpression body = (MemberExpression)propertySelector.Body;
return body.Member.Name;
}
用法是:
this.Name(x=>x.PublishDateTime);
我有一个扩展方法来获取 属性 name as
public static string Name<T>(this Expression<Func<T>> expression)
{
MemberExpression body = (MemberExpression)expression.Body;
return body.Member.Name;
}
我称它为
string Name = ((Expression<Func<DateTime>>)(() => this.PublishDateTime)).Name();
这工作正常,returns 我 PublishDateTime
作为字符串。
但是调用语句有问题,它看起来太复杂了,我想要这样的东西。
this.PublishDateTime.Name()
有人可以修改我的扩展方法吗?
对于 C# 6.0,您可以使用:
nameof(PublishDateTime)
你不能这样做 this.PublishDateTime.Name()
,因为唯一会传递到扩展方法的是你调用扩展方法的值或引用。
无论是 属性、字段、局部变量还是方法结果都没有关系,它不会有一个您可以在扩展方法中访问的名称。
表达式将是"verbose",见
How can I add this method as an extension method to properties of my class? (thanks
试试这个:
public static string Name<T,TProp>(this T o, Expression<Func<T,TProp>> propertySelector)
{
MemberExpression body = (MemberExpression)propertySelector.Body;
return body.Member.Name;
}
用法是:
this.Name(x=>x.PublishDateTime);