[英]How can I get/address the name of the calling property in my extension method
[英]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.