2016-04-21 56 views
8

我瞭解使用nameof()運算符進行異常處理,日誌記錄等。但我不理解下面直接來自某些Microsoft代碼的示例。nameof()運算符爲靜態字符串

​​

如何是,更多的有用比

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

回答

15

nameof是在編譯被評估的操作者時間,所以一旦你的應用程序被編譯,這兩個解決方案之間實際上沒有區別。

然而,在這種情況下,使用nameof有幾個好處:

  • 它使字符串值那麼「神奇」。因此,不是一些斷開的魔術字符串,該值背後的語義推理非常明確:它是變量本身的名稱。
  • 該名稱是名稱的實際參考,因此它們都已連接。這允許你重構其中的任何一個並自動影響另一個。當查找對該變量的引用時,它也使得「字符串」顯示爲參考。所以你確切知道它在哪裏被使用。
6

很簡單,第一個例子中導出從引用的變量名的分配的值,而第二從一個任意字符串導出的值可以是或可以不符合變量名稱。

因此,如果您重構變量的名稱,則與第一個示例中相關的變量值將自動更新,而您必須確保更新了字符串值以及第二個例子。

值得注意的,這兩個編譯到相同的IL罩蓋下方,推靜態字段的值上(每LinqPad)評價堆棧:

IL_0001: ldsfld  UserQuery+SessionKeys+Login.AccessToken