2016-10-10 15 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", 
    }; 

なぜ$、なぜ[...]?カンマで区切られたKey-Valueペアを使用しないこととは何か?

+3

[]は、新しいインデックス付きコレクション初期化子構文の一部です。なぜ$がそこにあるのか説明できません... – BoltClock

+2

ここの '$'記号は無用です。 – CodeNotFound

+2

C#で補間された補間以外の$が使われているとは思えませんが、それが奇妙な混乱を招き、その新機能のためにデザイナーが最初に選んだのはなぜですか?私はその例でその$を取り除くことはまったく効果がないと大いに疑う。 – user3185569

答えて

8

括弧は新しいindex initializersです。それは以前にあったcollection initializersよりも読みやすい辞書を初期化するもう一つの方法です。

文字列の場合、補間を使用しないときは、単なる文字列です。おそらく、コンパイラはそのような文字列を呼び出すためにstring.Formatを生成しないでしょう。 $も同様に削除できます(さまざまな機能を使用していない場合は、そのままの文字列リテラルでも同じです)。

$""の文字列の可能性がある理由の1つに、という文字列が何らかの形で特別なソースコードプリプロセッサまたは静的解析ツールのヒントになることがあります。 ReSharperがi18nの文字列を翻訳するのを防ぐために、似たような文字列リテラルを使用しています。しかし、それはビルド環境で探しているものです。

+0

ああ、私はそれらについて読んでいましたが、補間や自動プロパティの初期化のような新しいC#の機能を楽しんで、完全に忘れました。 。 – ProfK

関連する問題