@" "和""" """禁止转义字符串
string str = "";
C#的字符串字面值需要被双引号包裹,表示字符串。如123表示数字,而"123"表示字符串。
字面值的字符分为非转义字符和转义字符。非转义字符表示肉眼可见的字符,如a,b,c,1,2,3,$,* 等,转义字符是肉眼不可见但是有实际含义的字符,如回车,换行,起始,结束等字符,它只能靠 \ + 一个可见的非转义字符组合来表示,如\r表示回车字符,\n表示换行字符,所以,我们能够用可见字符表示所有的可见字符和非可见的转义字符。
但是2个问题:
问题一:如果真的表示\怎么办? \\表示\,假设需要表示\\r(3个字符的字面值),可以用\\\\r。
问题二:由于C#编译器认为被双引号包裹的内容才被认为是字符串,如果输入的字符串字面值里面含有双引号,会干扰编译器对字符串起始和结束的判断,所以,字面值的双引号虽然是可见字符,但也要求转义,如"hello",需要写作\"hello\",如果要表示"say\hello\",需要写作\"say\\hello\\\"。
至此,所有似乎已经解决。
继续探讨以下场景。
磁盘路径中有大量的\,我们不得不这样写
string path = "D:\\data\\logs\\2025-10-10";
这样比较麻烦,C#提供了语法糖,支持@符号,表示保持字面值是它本身的含义,不对\进行转义解释。
string path = @"D:\data\logs\2025-10-10";
但是@""中包裹的字面值含有"怎么办,因为禁止转义了,不能用\"表示",解决方案是用""表示一个"。
string str = @"Dog Say ""Wangwang"".";
使用案例
XML和Json字符串中,含有大量的\,需要全部转义,写起来可读性很差,可以用@禁止转义,只是注意不能再用\"表示",要用""表示".
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<root>
<config name=""Sys.tem"">
<config name=""Email"" value=""0X06"" type=""Integer"" />
<config name=""Email2"" value=""xuyue@qq.com"" type=""string"" />
</config>
</root>";
C# 11(>= .NET6.0)支持更强大的语法""" """,直接把字面值解析成其本身,无需考虑\和"。
string xml = """
<?xml version="1.0" encoding="utf-8"?>
<root>
<config name="System">
<config name="Emai.l" value="0X06" type="Integer" />
<config name="Email2" value="xuyue@qq.com" type="string" />
</config>
</root>
""";

浙公网安备 33010602011771号