【问题标题】:Why can't I use @$ prefix before strings?为什么我不能在字符串前使用@$ 前缀?
【发布时间】:2023-03-30 16:59:01
【问题描述】:

所有这些字符串前缀在 C# 中都是合法的:

  "text"
 @"text"
 $"text"
$@"text"

为什么不是这个?

@$"text"

人们会认为这些运算符的顺序无关紧要,因为它们在 C# 中没有其他含义,只是作为字符串的前缀。我想不出这种倒置双前缀无法编译的情况。该命令是否仅出于美观目的而执行?

【问题讨论】:

  • 我不认为它们是可交换的:$@"" 表示插入逐字字符串,这是有道理的。但是你会让@$"" 做什么?将字符串逐字 after 插值 ?

标签: c# string prefix string-interpolation


【解决方案1】:

在 C# 版本 8 之前,不允许插入逐字字符串,原因只是它们没有实现。然而,现在这是可能的,所以这两条线都可以工作:

var string1 = $@"text";
var string2 = @$"text";

【讨论】:

    【解决方案2】:

    这些前缀不是运算符。它们仅由编译器解释。虽然它理解$@,但它不理解@$。为什么?因为微软的编译器团队如此决定。

    不过支持后者的是planned for C# 8.0

    【讨论】:

      【解决方案3】:

      根据msDocs

      逐字插值字符串以$ 字符开头,后跟 @ 字符。

      $ 标记必须出现在逐字插入的 @ 标记之前 字符串。

      也许这是他们设计的让当前版本的 c# 编译器可以理解的方式。

      【讨论】:

        猜你喜欢
        • 2020-10-27
        • 1970-01-01
        • 2017-10-20
        • 1970-01-01
        • 2022-01-26
        • 2011-02-05
        • 2011-01-28
        相关资源
        最近更新 更多