string value1 = File.ReadAllText("C:\\file.txt");
string value2 = File.ReadAllText(@"C:\file.txt");
在上述陈述中,使用 @“C:\ file.txt”和 C:\ file.txt
的区别何时不同答案 0 :(得分:5)
编译器会按原样读取 @“C:\ file.txt”。删除逐字(@)将使其将'\ f'视为单个转义字符(Form feed)。换句话说:
@"C:\file.txt" == "C:\\file.txt"
@"C:\file.txt" != "C:\file.txt" // treated as C: + FormFeed + ile.txt
逐字字符串文字以@开头,也包含在double中 引号。例如:
@"good morning" // a string literal
逐字字符串的优点是转义序列不是 处理,这使得它易于编写,例如,完全 合格的文件名:
@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"
常规字符串文字由零个或多个字符组成 在双引号中,如“hello”,并且可能包括简单的转义 序列(例如\ t表示制表符)和十六进制和 Unicode转义序列。
逐字字符串文字由@字符后跟a组成 双引号字符,零个或多个字符,以及结束 双引号字符。一个简单的例子就是@“你好”。在逐字 字符串文字,分隔符之间的字符被解释 verbatim ,唯一的例外是quote-escape-sequence。在 特别是,简单的转义序列和十六进制和Unicode转义 序列不以逐字字符串文字处理。一字不差 字符串文字可能跨越多行。
答案 1 :(得分:1)
在字符串中使用\
时,通常必须使用\\
,因为\
是转义字符。实际上,您显示的第一个字符串(File.ReadAllText("C:\file.txt");
)应该抛出编译错误。
@
允许您在每次需要\\
时不使用\
来构建字符串。
答案 2 :(得分:0)
string value1 = "C:\file.txt";
string value2 = @"C:\file.txt";
value1的字符串将包含一个formfeed字符,其中\ f是,而第二个字符串将保留反斜杠和f。 (如果您尝试使用Console.Write在控制台应用程序中输出它们,这将变得非常清楚......)
value1版本的正确方法是"C:\\file.txt"
(value2版本使用什么叫做,如Dmitry所说,是一个逐字字符串)