为啥我不能在字符串前使用@$ 前缀?

Posted

技术标签:

【中文标题】为啥我不能在字符串前使用@$ 前缀?【英文标题】:Why can't I use @$ prefix before strings?为什么我不能在字符串前使用@$ 前缀? 【发布时间】:2019-01-31 10:16:06 【问题描述】:

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

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

为什么不是这个?

@$"text"

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

【问题讨论】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

根据msDocs

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

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

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

【讨论】:

以上是关于为啥我不能在字符串前使用@$ 前缀?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们在从中缀转换为前缀时必须反转字符串

为啥在 64 位平台上 BSTR 长度前缀为 4 个字节?

字符串在特定字符前添加或者删除前缀

索引最左前缀匹配原则

C# - 为啥我不能在字符串中使用三元运算符? [复制]

为啥我可以在 stricmp() 中使用 char 但不能使用字符串?