为什么尝试逐字逐句地失败?

时间:2015-01-07 19:35:31

标签: c# escaping quotes verbatim-string

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

<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">";

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

我可以通过转义引号来获取它:

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

......但如果它没有动词,那么逐字使用是什么用途?

2 个答案:

答案 0 :(得分:6)

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

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

MSDN link

  

使用双引号在逐字字符串

中嵌入引号

答案 1 :(得分:3)

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

请参阅:2.4.4.5 String literals - C#

  

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

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