在C#中,字符串开头的@符号代表什么?

13

考虑以下代码:

readonly private string TARGET_BTN_IMG_URL = @"\\ad1-sunglim\Test\";
在这行代码中,为什么需要使用@符号?

在JavaScript中,这将是一个错误:x = @"abc"; - nickf
1
给你整理了一下 :) *跑去发布答案 - Billy ONeal
2
这里有5到6个回答,都在说同样的事情。 - xofz
3个回答

21

它表示一个字面字符串,在这个字符串中 '\' 字符不会被解释为转义字符。


你可以将每个反斜杠都加倍,以达到相同的效果:TARGET_BTN_IMG_URL = "\\\\ad1-sunglim\\Test\\"; - Rubens Farias
是的,但它不太容易阅读,这就是为什么存在这个选项的原因。 - Ed S.

12

@ 告诉 C# 把它作为一个 逐字字符串字面值 来处理。例如:

string s = "C:\Windows\Myfile.txt";

这是一个错误,因为\W\M不是有效的转义序列。你需要改成这样:

string s = "C:\\Windows\\Myfile.txt";

为了更清晰,您可以使用一个字面字符串,它不会将 \ 视为特殊字符。因此:
string s = @"C:\Windows\Myfile.txt";

完全没问题。


编辑:MSDN 提供了以下示例:

string a = "hello, world";                  // hello, world
string b = @"hello, world";                 // hello, world
string c = "hello \t world";                // hello     world
string d = @"hello \t world";               // hello \t world
string e = "Joe said \"Hello\" to me";      // Joe said "Hello" to me
string f = @"Joe said ""Hello"" to me";     // Joe said "Hello" to me
string g = "\\\\server\\share\\file.txt";   // \\server\share\file.txt
string h = @"\\server\share\file.txt";      // \\server\share\file.txt
string i = "one\r\ntwo\r\nthree";
string j = @"one
two
three";

值得注意的是,如果想在一个verbatim字符串中插入引号",可以使用两个双引号""来实现(例如上面的例子@"Joe said ""Hello"" to me")。 - Redwood
离题: “verbatim” 前缀的起源是什么? - OscarRyz
@Oscar Reyes:嗯,因为这是Eric Lippert和他的朋友们在设计C#时决定使用的。 - Billy ONeal
@Noldorin: 普通的字符串字面量不能跨越多行,而“verbatim”字符串字面量可以跨越多行。 - Billy ONeal
@Billy 我的意思是,为什么它们被称为“verbatim”,这个词的起源是什么(除了那个名字叫做verbatim的公司)? - OscarRyz
显示剩余3条评论

2

因为你的字符串包含转义序列“\”,为了告诉编译器不要将“\”视为转义序列,你需要使用“@”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接