C# 关于字符串和转义字符的混淆

C# 关于字符串和转义字符的混淆,c#,escaping,C#,Escaping,假设创建了一个字符串,如下所示: string s=“此\n为新开始” 上面的代码中有一个\n,它是一个新行字符,可以通过双引号前面的@或使用\来转义 我感到困惑的是: a。假设此值是从输入框中提取到代码中的,则会将\n视为正常字符串(自动获取),而不是新行字符 b。如果将textbox值指定给多行textbox或标签,则该值将被视为\n,并作为\n而不是换行符输出 这个概念有什么参考吗。转义字符是在编译时处理的。这意味着程序的编译版本不包含任何转义字符 @“表示法也是如此:它只改变了在编写程序

假设创建了一个字符串,如下所示: string s=“此\n为新开始”

上面的代码中有一个\n,它是一个新行字符,可以通过双引号前面的@或使用\来转义

我感到困惑的是:

a。假设此值是从输入框中提取到代码中的,则会将\n视为正常字符串(自动获取),而不是新行字符

b。如果将textbox值指定给多行textbox或标签,则该值将被视为\n,并作为\n而不是换行符输出


这个概念有什么参考吗。

转义字符是在编译时处理的。这意味着程序的编译版本不包含任何转义字符

@“
表示法也是如此:它只改变了在编写程序时为字符串提供数据的方式,而不包括在编译的程序中

在文本框中输入的数据不进行转义字符处理,因此输入
\n
实际上是一个包含字符
\\'
'n'
的字符串

内存中可能有以下字节:

0x41, 0x42, 0x0a, 0x00
在十进制中,与读取相同的内存

65, 66, 10, 0
如果解释为ASCII字符,则

'A', 'B', Newline, EndOfString
如果要在源代码中表达这些内容,可以编写:

string s = "AB\n"; // note: 0x00 is appended automatically
编译器将完成所有转换,并以第一个示例中的字节结束。所以“\n”只是一种以方便的方式将特殊字符
换行符
/字节0x0A包含在字符串中的方法

如果您通过文件或套接字或其他方式从另一个应用程序接收到某些内容,那么实际上您会收到字节,您的代码可能会以上述方式之一解释这些字节


请注意:在.Net中,我们有UTF字符串,其中每个字符实际上使用16位/两个字节,因此上述解释适用于C,但不完全适用于C。但是,基本原理是相同的。

我们正在将另一个应用程序(而不是.net)的数据接收到我们的.net WCF服务中。数据包含csv值,由换行符分隔。那么,文本将作为\n接收吗?然后我们必须基于\n来处理它,并删除\n或拆分\n上的数据并将其存储在数组中?编译代码后,
\n
意味着某种特殊的东西的整个概念并不存在。换行符将只是换行符。假设第三方应用程序发送包含“Hello\nWorld”的文本数据,则.NET会将其解释为新行或“\n”?例如,假设.NET将从第三方应用程序接收的数据(“Hello\nWorld”)写入文件。然后,将\n显示在文件中还是显示新行?