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

     2023-02-22     77

关键词:

【中文标题】为啥我不能在字符串前使用@$ 前缀?【英文标题】: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# 编译器可以理解的方式。

【讨论】:

为啥我不能只用前向声明 C++ 声明一个类的静态成员?

】为啥我不能只用前向声明C++声明一个类的静态成员?【英文标题】:WhyIcannotdeclareanstaticmemberofaclasswithonlyaforwarddeclarationc++?为什么我不能只用前向声明C++声明一个类的静态成员?【发布时间】:2019-10-0318:17:30【问题描述】:为... 查看详情

为啥我不能在存储函数中使用 Like?

...写一些存储函数。其中一个是一个非常基本的函数,它以字符串作为参数并返回另一个字符串。这是我的功能:CREATEORREPLACEFUNCTIONget_mail_custcode(custcod 查看详情

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

】为啥我可以在stricmp()中使用char但不能使用字符串?【英文标题】:WhycanIusecharbutnotstringwithstricmp()?为什么我可以在stricmp()中使用char但不能使用字符串?【发布时间】:2017-09-1115:05:28【问题描述】:这是代码:chars[101],s1[101];cin&g... 查看详情

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

】C#-为啥我不能在字符串中使用三元运算符?[复制]【英文标题】:C#-Whycan\'tIuseternaryoperationinsidestring?[duplicate]C#-为什么我不能在字符串中使用三元运算符?[复制]【发布时间】:2017-09-0618:43:33【问题描述】:我正在努力写作$"This... 查看详情

为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]

】为啥我不能在没有括号的插值字符串中使用条件运算符?[复制]【英文标题】:Whycan\'tIusetheconditionaloperatorinaninterpolatedstringwithoutbrackets?[duplicate]为什么我不能在没有括号的插值字符串中使用条件运算符?[复制]【发布时间】:20... 查看详情

在实体框架代码优先中,为啥我不能在连接字符串中使用 SQL Server Express?

】在实体框架代码优先中,为啥我不能在连接字符串中使用SQLServerExpress?【英文标题】:InEntityFrameworkcode-first,whycan\'tIuseSQLServerExpressintheconnectionstring?在实体框架代码优先中,为什么我不能在连接字符串中使用SQLServerExpress?【发... 查看详情

为啥我不能在立即执行语句中使用绑定变量?

...xecuteimmediate构建动态SQL语句时,我想使用绑定变量而不是字符串连接。在下面的示例中,我可以为a、b和ret使用绑定变量,但是当我尝试为f绑定 查看详情

在 Java 中,为啥我不能写 i++++ 或 (i++)++?

】在Java中,为啥我不能写i++++或(i++)++?【英文标题】:InJava,whycan\'tIwritei++++or(i++)++?在Java中,为什么我不能写i++++或(i++)++?【发布时间】:2011-06-0619:14:04【问题描述】:当我尝试在/递减中写入后缀/前缀,然后在/递减中写入后缀... 查看详情

为啥我不能在 gdb 中使用 printf 和临时结构的字符串成员

】为啥我不能在gdb中使用printf和临时结构的字符串成员【英文标题】:Whycan\'tIuseprintfingdbwithstringmemberoftemporarystruct为什么我不能在gdb中使用printf和临时结构的字符串成员【发布时间】:2013-10-2519:29:10【问题描述】:这是一个简单... 查看详情

为啥我在使用 STL 列表时不能使用这个回文函数?

...了一个回文函数,它允许我使用任何容器类型,它适用于字符串、向量和双端队列,但是当我创建一个STL列表并尝试运行代码时,我得到了下面的错误,我不能\'不知 查看详情

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

...。如果我们可以处理超过4Gb的内存,为什么不允许使用5Gb字符串?答案只是“按规范”还是有一些我不知道的互操作性/向后兼容性原因? 查看详情

为啥不能对 std::vector 使用前向声明?

】为啥不能对std::vector使用前向声明?【英文标题】:Whycan\'taforwarddeclarationbeusedforastd::vector?为什么不能对std::vector使用前向声明?【发布时间】:2010-09-0710:21:12【问题描述】:如果我这样创建一个类://B.h#ifndef_B_H_#define_B_H_classBp... 查看详情

c++里面,为啥重载前++时不返回引用就不能连用?

参考技术Ac++运算符重载前置++和后置++不一样,比如classLengthprivate:intlen_inches;public://前缀++的声明Lengthoperator++();//后缀++的声明Lengthoperator++(int);;LengthLength::operator++()len_inches++;return*this;LengthLength::operator++(int)Lengthtemp=*this;len_inches++;re... 查看详情

为啥我不能在 for 循环中追加字符串? [关闭]

】为啥我不能在for循环中追加字符串?[关闭]【英文标题】:Whycan\'tIappendStringinaforLoop?[closed]为什么我不能在for循环中追加字符串?[关闭]【发布时间】:2012-08-1502:28:11【问题描述】:我有以下代码,我试图简单地循环遍历一个实... 查看详情

为啥我不能在 MySQL 表中插入某些字符?

...尝试执行MySQL插入操作,但收到如下错误消息:不正确的字符串值:第1行的列\'foo\'的\'\\xA0\'\\xA0和\\x96都会出现这种情况。我正在使用PHP,并将此 查看详情

为啥我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?

】为啥我不能在C++中使用str.erase(str.begin()+index)擦除字符串中的字符?【英文标题】:Whycan\'tIerasecharactersinastringusingstr.erase(str.begin()+index)inC++?为什么我不能在C++中使用str.erase(str.begin()+index)擦除字符串中的字符?【发布时间】:201... 查看详情

为啥不能使用符号而不是字符串来访问 Rails 模型属性?

】为啥不能使用符号而不是字符串来访问Rails模型属性?【英文标题】:Whyaren\'tRailsmodelattributesaccessibleusingsymbolsinsteadofstrings?为什么不能使用符号而不是字符串来访问Rails模型属性?【发布时间】:2011-12-0609:39:01【问题描述】:... 查看详情

为啥我不能在“|”处分开在clojure中[重复]

...8:35:44【问题描述】:我试图在clojure"Hello|World"中拆分一个字符串,但是当使用拆分方法"(clojure.string/splitx#"|")" 查看详情