C# 获取属性名的扩展方法

C# 获取属性名的扩展方法,c#,reflection,extension-methods,propertyinfo,C#,Reflection,Extension Methods,Propertyinfo,我有一个扩展方法来获取属性名 public static string Name<T>(this Expression<Func<T>> expression) { MemberExpression body = (MemberExpression)expression.Body; return body.Member.Name; } 有人可以修改我的扩展方法吗?使用C#6.0,您可以使用: nameof(PublishDateTime)

我有一个扩展方法来获取属性名

public static string Name<T>(this Expression<Func<T>> expression)
{
    MemberExpression body = (MemberExpression)expression.Body;
    return body.Member.Name;
}
有人可以修改我的扩展方法吗?

使用C#6.0,您可以使用:

nameof(PublishDateTime)
使用C#6.0,您可以使用:

nameof(PublishDateTime)

不能执行
this.PublishDateTime.Name()
,因为将传递到扩展方法的唯一内容是调用扩展方法的值或引用

无论它是属性、字段、局部变量还是方法结果都无关紧要,它没有一个可以在扩展方法内部访问的名称

表达式将为“详细”,请参阅
(感谢)将其放入静态帮助器类。

您不能执行
此.PublishDateTime.Name()
,因为将传递到扩展方法的唯一内容是调用扩展方法的值或引用

无论它是属性、字段、局部变量还是方法结果都无关紧要,它没有一个可以在扩展方法内部访问的名称

表达式将为“详细”,请参阅 (谢谢)将其放入静态帮助器类。

尝试以下操作:

public static string Name<T,TProp>(this T o, Expression<Func<T,TProp>> propertySelector)
{
    MemberExpression body = (MemberExpression)propertySelector.Body;
    return body.Member.Name;
}
试试这个:

public static string Name<T,TProp>(this T o, Expression<Func<T,TProp>> propertySelector)
{
    MemberExpression body = (MemberExpression)propertySelector.Body;
    return body.Member.Name;
}

看,这不是我想要的…这似乎正是你想要的我需要这个
这个.PublishDateTime.Name()
,你能告诉我如何创建扩展方法来做到这一点吗?我已经完成了链接中给出的内容。See的可能重复项这不是我想要的…这似乎正是你想要的。我需要这个
这个.PublishDateTime.Name()
,你能告诉我如何创建扩展方法来完成吗?我已经完成了链接中给出的内容。可能重复为什么我不能这样做?当我调用
this.PublishDateTime.Name()
时,这意味着我正在将对象传递给扩展方法。现在扩展方法应该自己创建表达式。我想修改扩展方法。必须有一些软解决方案…你可以这样做,但它不会给你的成员名称。扩展方法不“知道”正在对成员调用它,并且它不必是(
string foo=“”;var fooName=foo.Name()
)。所有将传递给扩展方法的都是的值,或者对调用它的对象的引用。为什么我不能这样做?当我调用
this.PublishDateTime.Name()
时,这意味着我正在将对象传递给扩展方法。现在扩展方法应该自己创建表达式。我想修改扩展方法。必须有一些软解决方案…你可以这样做,但它不会给你的成员名称。扩展方法不“知道”正在对成员调用它,并且它不必是(
string foo=“”;var fooName=foo.Name()
)。所有将传递给扩展方法的都是您调用它的对象的值或引用。@Lali Get Visual Studio 2015。所以我需要等待。@Lali Get Visual Studio 2015。所以我需要等待。非常好,它解决了我的问题。时髦的调用
this.Name(x=>x.PublishDateTime)这需要什么样的最低C#版本或LINQ?非常好,它解决了我的问题。时髦的调用
this.Name(x=>x.PublishDateTime)此操作所需的最低C#版本或LINQ是多少?
this.Name(x=>x.PublishDateTime);