2013-06-11 261 views
-1

這是我想要做的工作的那種代碼:如何從類實例的屬性中獲取屬性名稱?

string Name = GetPropName(myClass.SomeProperty); // returns "SomeProperty" 

因爲我可能是我的重命名類的屬性,我不願意忘記改變我的代碼某處其字符串名稱,並且有很多地方使用字符串名稱作爲屬性,所以我想用這個方便的方法來獲取屬性的當前名稱作爲字符串。我該怎麼做呢?

我所追求的是一種方法,它只返回作爲參數接收的屬性的字符串名稱

我發現以前有類似的問題,但沒有答案能很好地解釋如何做我想做的事情。

+0

請參閱http://stackoverflow.com/a/3269604/880990 –

+0

是否需要類似GetPropName(x => x.PropName)的東西; – adt

+0

@我不知道,是嗎? – user1306322

回答

3

調用該方法並傳入MyClass.MyProperty的問題是該屬性的值會發送到該方法。您可以嘗試使用反射從該值中獲取屬性名稱,但有兩個問題:

1 - 屬性需要有一個值。

2 - 如果相同類型的兩個屬性具有相同的值,則無法(至少據我所知)區分這兩個屬性。

什麼,你可以儘管做的是使用一個Expression的財產傳遞給方法,獲取表達式的主體和最終成員(屬性)名稱:

public static string GetPropertyName<T, P>(Expression<Func<T, P>> propertyDelegate) 
{ 
    var expression = (MemberExpression)propertyDelegate.Body; 
    return expression.Member.Name; 
} 

,並使用它:

string myPropertyName = GetPropertyName((MyClass x) => x.SomeProperty); 
+0

好吧!這是有效的,但不利的一面是它會中斷編輯並繼續執行它的位置。 – user1306322