获取属性名称的扩展方法

Lal*_*ali 4 c# reflection extension-methods propertyinfo

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

public static string Name<T>(this Expression<Func<T>> expression)
{
    MemberExpression body = (MemberExpression)expression.Body;
    return body.Member.Name;
}
Run Code Online (Sandbox Code Playgroud)

我称之为

string Name = ((Expression<Func<DateTime>>)(() => this.PublishDateTime)).Name();
Run Code Online (Sandbox Code Playgroud)

这工作正常,并将我PublishDateTime作为字符串返回.

但是我对调用语句有一个问题,它看起来太复杂了,我想要这样的东西.

this.PublishDateTime.Name()
Run Code Online (Sandbox Code Playgroud)

有人可以修改我的扩展方法吗?

Tah*_*ooy 11

试试这个:

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

用法是:

this.Name(x=>x.PublishDateTime);
Run Code Online (Sandbox Code Playgroud)


jan*_*ann 10

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

nameof(PublishDateTime)
Run Code Online (Sandbox Code Playgroud)

  • @Lali获取Visual Studio 2015. (2认同)