方法获取属性名称

本文关键字:属性 获取 方法 | 更新日期: 2023-09-27 18:10:58

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

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();

这工作得很好,并返回我PublishDateTime作为字符串。

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

this.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;
}

用法为:

this.Name(x=>x.PublishDateTime);

在c# 6.0中,您可以使用:

nameof(PublishDateTime)

您不能执行this.PublishDateTime.Name(),因为将传递给扩展方法的唯一东西是调用扩展方法的值或引用。

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

表达式将是"verbose",参见如何将此方法作为扩展方法添加到类的属性中?(感谢@Black0ut)把它放在一个静态助手类。