为啥用@分配字符串? [复制]

Posted

技术标签:

【中文标题】为啥用@分配字符串? [复制]【英文标题】:Why assign a string with @? [duplicate]为什么用@分配字符串? [复制] 【发布时间】:2012-09-06 21:54:44 【问题描述】:

可能重复:What's the @ in front of a string in C#?

这是我长期以来一直质疑但从未费心去弄清楚的问题。当我下载第三方库时,我经常看到字符串分配在字符串前使用@ 符号。

string myString = @"Some text";

但如果我只是这样做,似乎完全没有区别

string myString = "Some text";

那么@ 在做什么呢?

【问题讨论】:

抱歉,我搜索的时候没看到。 @michael.mankus 那么你做了多少“研究”?我记得在我不知道它的意思时寻找它并在几秒钟内找到它...... 平心而论,我进行了谷歌搜索 (google.com/…),结果首页上的任何链接都没有解决这个问题。我认为这似乎是一个足够公平的问题。但是,如果您觉得有必要投反对票,那也没关系。正如我所说,我很抱歉重复。 我没有对你投反对票,但我可能会说你的谷歌搜索写得不好。 C#中的@可以是任何东西,如果你简单地添加单词“string”,结果会很快弹出。 【参考方案1】:

它表示verbatim string literal,允许您不必转义某些字符:

string foo = @"c:\some\path\filename.exe";

对比:

string foo = "c:\\some\\path\\filename.exe";

【讨论】:

【参考方案2】:
string reason = @"this string literal mea\ns something different with an @ in front than without";

如果没有@,上面的字符串将有一个换行符,而不是单词“means”中的'n'。使用@,“意思”这个词看起来就像你看到的一样。此功能对于文件路径之类的内容特别有用:

string path = @"C:\Users\LookMa\NoDoubleSlashes.txt";

【讨论】:

那有什么区别?这到底是个问题? +1 仅使用自记录代码回答问题。【参考方案3】:

这是一个逐字字符串文字。它可以让您执行@"C:\" 而不是"C:\\" 之类的操作,并且在正则表达式和文件路径中特别有用,因为它们通常使用编译器不应解析的反斜杠。请参阅the documentation 了解更多信息。

【讨论】:

【参考方案4】:

在这种情况下没有区别。 '@' 所做的只是允许您省略转义反斜杠。如果您使用 '@' 并希望在字符串中包含双引号,则需要将双引号加倍。

【讨论】:

以上是关于为啥用@分配字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥编译器分配的内存比需要的多? [复制]

c++中为啥要用new 函数()实现多态?

为啥使用 copy() 时字符串和数组的处理方式不同? [复制]

为啥我不能用 `copy()` 复制切片?

为啥我不能将 string::back 分配给字符串?

为啥我不能动态分配这个结构字符串的内存?