逐字字符串缺少回车 return

Verbatim string is missing carriage return

今天遇到一个奇怪的问题。我有这样的逐字字符串:

var s = @"     0     1
0     0"

即在一个之后有一个新行。我的 Environment.NewLine 设置为 \r\n

这是单元测试的一部分,在过去的几个月里测试一直运行良好。现在,当我 运行 我的测试时,上面的字符串声明导致:

"     0     1\n     0     0"

而不是

"     0     1\r\n     0     0"

意味着测试失败。

我把每一个字都甩出来证明这是真的。我也试过不使用逐字字符串,而是像这样:

var s = "     0     1\r\n    0     0"

然后测试通过。

有人知道这里会发生什么吗?

如果要在单元测试中使用字符串,最好确保内容始终相同。我建议这样声明:

var s = $"     0     1{Enviroment.NewLine}0     0";

答案是这样的:Git(最有可能)将文件中的行结尾交换为 LF。根据单元测试中的文件行结尾不是一个好主意,所以我更改了代码以在所有情况下明确指定换行符,因此:

var s = "     0     1\r\n    0     0"

您可以使用字符串插值和 verbatim 一起使用来添加控制字符。

var s = @$"     0     1{'\r'}
0     0"

请检查这个answer - 基本上它是由代码编辑器行尾设置引起的。我们在单元测试中遇到了同样的问题。