为什么尝试逐字化此字符串会失败

本文关键字:字符串 失败 为什么 | 更新日期: 2023-09-27 18:36:34

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

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

。但是,如果不是逐字逐句的,那么逐字有什么用呢?

为什么尝试逐字化此字符串会失败

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

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

MSDN 链接:

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

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

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

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

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