2016-03-31 8 views
8

Czy istnieje sposób na uzyskanie nazwy bieżącej właściwości w programie pobierającym/ustawiającym?C# 6: nameof() bieżąca właściwość w programie pobierającym/ustawiającym

coś takiego:

public string MyProperty 
{ 
    get { return base.Get<string>(nameof(ThisProperty)); } 
    set { base.Set<string>(nameof(ThisProperty), value); } 
} 

(ThisProperty wróci "myProperty").

Dzięki!

+1

'nameof (MyProperty)' powinno działać poprawnie? – MarcinJuraszek

+5

Dlaczego powinienem? Jaki jest problem z pisaniem 'nameof (MyProperty)'? –

+0

Może to być przydatne w przypadku, gdy nazwa 'MyProperty' może ulec zmianie: należy pamiętać o aktualizacji' nameof (cokolwiek) ', chociaż IDE Visual Studio powinno wychwycić ten problem. – levelonehuman

Odpowiedz

17

Nie można tego zrobić z nameof, ale jest jeszcze lepszy sposób (dostępny od C# 5). Można zrobić propertyName parametr opcjonalny i zastosować atrybut do niego CallerMemberName:

protected void Set<T>(T value, [CallerMemberName] string propertyName = null) 
{ 
    ... 
} 

protected T Get<T>([CallerMemberName] string propertyName = null) 
{ 
    ... 
} 

Teraz, jeśli pominąć argument propertyName, obecna nazwa członkiem jest przekazywana w sposób dorozumiany:

public string MyProperty 
{ 
    get { return base.Get<string>(); } // same as calling Get<string>("MyProperty") 
    set { base.Set<string>(value); } // same as calling Set<string>(value, "MyProperty") 
} 
+0

To jest niesamowita odpowiedź! Dziękuję Panu! – Smartis

+0

Dziękuję bardzo! – evaenrique

+0

Błagam, by różniło się twoim pierwszym zdaniem. Począwszy od C# 6, 'nameof' faktycznie wykona zadanie:' public string MyProperty { get {return base.Get (nameof (MyProperty)); } zestaw {base.Set (nameof (MyProperty), wartość); } } ' – takrl

-3

alternatywna jest do the MethodBase, ponieważ Get i Set są zasadniczo metodami.

public string MyProperty 
{ 
    get 
    { 
     return MethodBase.GetCurrentMethod().Name.Substring(4); 
    }    
} 

podciąg jest tam, ponieważ każda nazwa jest poprzedzona get_ i set_

ta zwraca myProperty jako wynik.

Powiązane problemy