簡體   English   中英

獲取屬性名的擴展方法

[英]Extension method to get property name

我有一個擴展方法來獲取屬性名稱

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() ,因為將傳遞給擴展方法的唯一內容是您調用擴展方法的值或引用。

無論是屬性、字段、局部變量還是方法結果都無關緊要,它不會有您可以在擴展方法內部訪問的名稱。

該表達式將是“詳細的”,請參閱如何將此方法作為擴展方法添加到我的類的屬性中? (感謝@Black0ut )將其放入靜態幫助器類中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM