什么' $'不用于插值的字符串前缀是什么意思?

时间:2016-10-10 05:49:46

标签: c# .net-core c#-6.0

我在.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",
    };

为什么是$以及为什么[...]?与不使用逗号分隔的键值对有什么关系?

1 个答案:

答案 0 :(得分:8)

括号是新的index initializers。它只是另一种初始化字典的方法,该字典比之前的collection initializers更具可读性。

对于字符串,当不使用插值时,它只是一个简单的字符串,仅此而已。据推测,编译器甚至不会为这些字符串生成string.Format调用。您也可以删除$(当不使用任何不同的功能时,它与逐字字符串文字相同)。

$""字符串的一个可能原因可能是,它暗示了源代码预处理器或静态分析工具,字符串在某种程度上是特殊的。我已经看到类似用于逐字字符串文字的东西,以防止ReSharper建议翻译i18n的字符串。不过,这是您在构建环境中寻找的东西。