2

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

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"

然后测试通过。

有谁知道这里会发生什么?

4

3 回答 3

2

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

var s = "     0     1\r\n    0     0"
于 2019-10-21T09:43:53.873 回答
1

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

var s = $"     0     1{Enviroment.NewLine}0     0";
于 2019-10-21T09:33:20.720 回答
1

您可以将字符串插值与逐字逐句一起使用来添加控制字符。

var s = @$"     0     1{'\r'}
0     0"
于 2020-11-26T13:12:10.177 回答