为什么\字符在我的@字符串中加倍?

var phone = @"^\+(?:[0-9] ?){6,14}[0-9]$"; 

那么手机将等于^\\+(?:[0-9] ?){6,14}[0-9]$

我想(我发现的例子似乎表明)@字符意味着留下我的字符串我是如何拥有它的。 为什么它会加倍\以及如何阻止它?

visual studio调试器会将它显示为加倍,因为在C#中,\将在转义序列之前。 别担心 – 你的字符串不变。

看起来只是在调试检查器中加倍。

请注意,检查器中显示的字符串@开头 – 如果没有 @ ,则显示如何编写字符串。 这两种forms是等价的。

如果您真的担心字符串的内容,请在控制台应用程序中输出。

以另一种方式重申,比较

 var equal = @"^\+(?:[0-9] ?){6,14}[0-9]$" == "^\\+(?:[0-9] ?){6,14}[0-9]$" 

永远都是true 。 就像那样

 var equal = @"\" == "\\"; 

如果使用Text Visualizer检查变量,则会显示未转义的普通字符串,就像您逐字声明的那样。