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

Pro*_*ofK 1 c# c#-6.0 .net-core

我刚刚在一篇关于.NET Core配置的文章中遇到过这段代码,字典键对我来说非常陌生:

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",
    };
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*oey 8

括号是新的索引初始值设定项.这只是另一种初始化字典的方法,该字典比以前的集合初始化程序更具可读性.

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

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