C# “如何合并或注入”@&引用;字符串中的字符,包括转义字符,而不在C中从头定义字符串变量#

C# “如何合并或注入”@&引用;字符串中的字符,包括转义字符,而不在C中从头定义字符串变量#,c#,string,C#,String,嗨,我有两个相关的问题。 1) 假设我们有: 字符串strMessage=“\nHellow\n\nWorld”; console.writeln(strMessage); 结果是: Hellow 世界 现在,如果我们想在一行中以原始格式显示字符串 我们必须从头开始重新定义第一个变量。 字符串strorignemessage=@“\nHellow\n\nWorld” 控制台写入(strorignemessage) 结果是: \下面\n\n世界----------------

嗨,我有两个相关的问题。 1) 假设我们有:

字符串strMessage=“\nHellow\n\nWorld”; console.writeln(strMessage);
结果是:
Hellow

世界


现在,如果我们想在一行中以原始格式显示字符串 我们必须从头开始重新定义第一个变量。


字符串strorignemessage=@“\nHellow\n\nWorld”

控制台写入(strorignemessage)


结果是: \下面\n\n世界------------------->一切正常。 我想知道有没有办法避免定义 代码中的新变量(StrorigneMessage)用于此目的,并且仅使用 第一个字符串变量(strMessage)并应用一些技巧,将其打印在一行中。

起初,我尝试了以下解决方法,但它产生了一些错误。假设我们有:
字符串strMessage=“a\aa\nbb\nc\rccc”

字符串strOrigenalMessage=strMessage.replace(“\n”,“\\n”)。replace(“\r”,“\\r”);

Console.writeln(strOrigenalMessage)


结果是:aa\nbb\nc\rccc 注意,在第一个“\”之前没有打印。现在我的第二个问题是:

2) 如何解决字符串中单个“\”的新问题


我希望能正确地命名这个问题,我的解释就足够了,谢谢你,因为编译器已经将原始字符串中的所有转义字符转换为它们所代表的字符。事实上,将它们转换为非特殊字符已经太晚了。您可以执行搜索和替换,将“\n”转换为字面上的@“\n”,但这很奇怪,最好首先正确定义字符串。如果首先要转义反斜杠,为什么不在每个反斜杠前面加一个反斜杠字符:

使用“\\n”代替“\n”

根据您的评论更新:

如果字符串来自用户输入,则不需要转义反斜杠,因为它将作为反斜杠存储在输入字符串中。转义字符在代码中仅作为字符串文字中的转义字符使用(前面没有@,这使它们成为逐字字符串文字)。

如果您希望“\n\n\a\r\blah”以
\n\n\a\r\blah
打印,而不使用
@
只需将所有
\
替换为
\


\
是非逐字字符串中的转义符。因此,您只需将转义符原封不动地转义即可。

如果您想同时使用两个字符串,但只想在代码中使用一个字符串,那么请使用@编写字符串,并使用Replace(@“\n”,“\n”)构造另一个字符串。

对Anthony Pegram(如果我理解正确)和任何认为它有用的人的解释

我想我在问题2中找到了自己的路

起初,不幸的是,我认为 转义字符限制为\n、\t、\r、\v和 这让我感到困惑,因为我使用了\a和\b示例字符串 编译器的行为对我来说是不可理解的

但最后我发现\a和\b在 也设置了转义字符。如果使用不带转义字符的“\” 编译时会出现错误(当我再次想到我的错误时,这太有趣了)

请参考这篇有用的msdn文章了解更多信息。

而你不能用“单身”来代替“单身”\\ 因为从根本上说,如果不使用 字符串中其后的转义字符。因此我们无法在代码中写入这样的字符串:

字符串strTest=“abc\pwww”——>编译时错误

以及用于检索字符串的非活动转义字符版本 我们可以像我以前使用的那样简单地使用string.replace方法。

请原谅我这么久,谢谢大家的合作。

假设该字符串将在程序内部传递(例如从用户输入),我知道\\的本质,但使用@是一种安全的方法。如果我们想使用扩展方法或帮助方法,使用@将字符串转换为非转义字符版本,似乎是不可能的。我说得对吗?如果这是真的,有人能给我建议一种方法,将字符串转换成非字符版本,并能正常工作吗?谢谢你,为时已晚,我的计算机被严重感染了。好的,你能给我建议一些片段,将字符串中的\替换为\\吗,我尝试了很多代码,但是编译器似乎不喜欢理解我们想要什么,谢谢