2016-10-10 30 views
1

我剛剛碰到過這樣的代碼上.NET Core configuration的一篇文章中,和字典鍵看起來非常國外對我說:

static IReadOnlyDictionary<string, string> DefaultConfigurationStrings{get;} = new Dictionary<string, string>() 
    { 
     ["Profile:UserName"] = Environment.UserName, 
     [$"AppConfiguration:ConnectionString"] = DefaultConnectionString, 
     [$"AppConfiguration:MainWindow:Height"] = "400", 
     [$"AppConfiguration:MainWindow:Width"] = "600", 
     [$"AppConfiguration:MainWindow:Top"] = "0", 
     [$"AppConfiguration:MainWindow:Left"] = "0", 
    }; 

爲什麼$,爲什麼[...]?關於不使用逗號分隔的鍵值對的事情?

+3

[]是新索引集合初始值設定項語法的一部分。無法解釋爲什麼$ s在那裏,雖然... – BoltClock

+2

這裏的'$'符號是無用的。 – CodeNotFound

+2

我不認爲$有比C#6中添加的任何其他用法。如果它有,那麼它會導致一個奇怪的混淆,並提出問題爲什麼設計師首先選擇它爲新功能。我高度懷疑在這個例子中刪除$並不會有任何效果。 – user3185569

回答

8

括號是新的index initializers。這只是另一種初始化字典的方法,它比以前在那裏的collection initializers更具可讀性。

至於字符串,當不使用插值時,它只是一個簡單的字符串,僅此而已。據推測,編譯器甚至不會爲這樣的字符串生成string.Format調用。您也可以刪除$(當不使用任何不同的功能時,與逐字串文字相同)。

一個可能的原因爲$""可能是,雖然,這是一個暗示,無論是源代碼預處理程序或靜態分析工具,該字符串是有點特殊。我已經看到類似於逐字串文字的類似用法,以防止ReSharper建議爲i18n翻譯字符串。不過,這是您在構建環境中尋找的東西。

+0

啊,我已經閱讀過關於它們的內容,但是完全忘記了它們,享受了其他新的C#特性,例如插值和自動屬性初始值。 。 – ProfK

相關問題