2016-04-21 12 views
8

Rozumiem użycie operatora nameof() do obsługi wyjątków, rejestrowania itp. Ale nie rozumiem poniższego przykładu pochodzącego bezpośrednio z jakiegoś kodu Microsoft.Operacja nameof() dla ciągów statycznych

public static class SessionKeys 
{ 
    public static class Login 
    {   
     public static string AccessToken = nameof(AccessToken); 
     public static string UserInfo = nameof(UserInfo); 
    } 
} 

Jak to bardziej przydatne niż

public static class SessionKeys 
{ 
    public static class Login 
    { 
     public static string AccessToken = "AccessToken"; 
     public static string UserInfo = "UserInfo"; 
    } 
} 

Odpowiedz

15

nameof jest operator, który jest analizowany w czasie kompilacji czasie, więc po skompilowaniu aplikacji nie ma właściwie żadnej różnicy między tymi dwoma rozwiązaniami.

Jednak użycie nameof w tym przypadku ma kilka zalet:

  • To sprawia, że ​​wartość ciągu mniej „magiczne”. Więc zamiast być jakimś odłączonym ciągiem magicznym, semantyczne rozumowanie kryjące się za tą wartością jest bardzo jasne: jest to nazwa samej zmiennej.
  • Nazwa jest rzeczywistym odnośnikiem do nazwy, więc obie są połączone. Pozwala to na zmianę jednego z nich i automatycznie wpływa na drugi. Powoduje również, że "ciąg" pojawia się jako odniesienie podczas wyszukiwania odniesień do tej zmiennej. Więc wiesz dokładnie, gdzie został użyty.
6

Bardzo prosto, pierwszy przykład pochodzi przypisaną wartość z wymienionej nazwy zmiennej, natomiast drugi wywodzi się wartość z dowolnego ciągu znaków, który może lub nie pasuje do nazwy zmiennej.

W rezultacie, jeśli zmienisz nazwę zmiennych, wartość skojarzona z tymi zmiennymi zostanie automatycznie zaktualizowana, podobnie jak w pierwszym przykładzie, podczas gdy musisz upewnić się, że zaktualizowałeś także wartość ciągu znaków w drugi przykład.

Warto zauważyć, że zarówno kompilacji do tej samej IL pod maską popychając wartość pola statycznego na stos oceny (za LINQPad)

IL_0001: ldsfld  UserQuery+SessionKeys+Login.AccessToken 
Powiązane problemy