我在.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",
};
为什么是$
以及为什么[...]
?与不使用逗号分隔的键值对有什么关系?
答案 0 :(得分:8)
括号是新的index initializers。它只是另一种初始化字典的方法,该字典比之前的collection initializers更具可读性。
对于字符串,当不使用插值时,它只是一个简单的字符串,仅此而已。据推测,编译器甚至不会为这些字符串生成string.Format
调用。您也可以删除$
(当不使用任何不同的功能时,它与逐字字符串文字相同)。
$""
字符串的一个可能原因可能是,它暗示了源代码预处理器或静态分析工具,字符串在某种程度上是特殊的。我已经看到类似用于逐字字符串文字的东西,以防止ReSharper建议翻译i18n的字符串。不过,这是您在构建环境中寻找的东西。