-2

我有这个要从字符串中删除的子字符串:

<ArrayOfSiteQuery xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS">

意识到它充满了时髦,我认为逐字逐句可以解决所有问题:

String messedUpJunk = @"<ArrayOfSiteQuery xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS">";

...但是,用迷失太空中的机器人来解释,它不会计算(编译);我在第一个“http”上得到“ ;预期”。

我可以通过转义引号来编译它:

String messedUpJunk = "<ArrayOfSiteQuery xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS\">";

...但是,如果不是逐字逐句,逐字逐句又有什么用呢?

4

2 回答 2

6

双引号是您需要在逐字字符串中转义的唯一字符。转义它的方式不同,您需要将它加倍 ( "") 而不是使用反斜杠:

String messedUpJunk = @"<ArrayOfSiteQuery xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns=""http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS"">";

MSDN 链接

使用双引号在逐字字符串中嵌入引号

于 2015-01-07T19:38:05.550 回答
3

它是需要转义的双引号(使用双双引号),对于您不需要转义的其余字符,例如反斜杠\

请参阅:2.4.4.5 字符串文字 - C#

逐字字符串文字由一个 @ 字符后跟一个双引号字符、零个或多个字符以及一个结束双引号字符组成。一个简单的例子是@"hello"。在逐字字符串文字中,分隔符之间的字符被逐字解释,唯一的例外是引号转义序列。特别是,简单的转义序列以及十六进制和 Unicode 转义序列不会在逐字字符串文字中进行处理。逐字字符串文字可能跨越多行。

您需要转义双引号的原因是因为它代表字符串的开始和结束,无论是逐字还是常规。

于 2015-01-07T19:39:02.100 回答