逐字字符串缺少回车符

时间:2019-10-21 09:23:01

标签: c# line-endings verbatim-string

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

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"

然后测试通过。

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

df_rld %>% 
   select(type, run_length) %>% 
   mutate(run_length = as.numeric(run_length)) %>% 
   group_by(type, run_length) %>% 
   count(run_length) %>%
   group_by(type) %>% 
   mutate(ratio = n/sum(n))

#> # A tibble: 5 x 4
#> # Groups:   type [3]
#>   type  run_length     n ratio
#>   <fct>      <int> <int> <dbl>
#> 1 A             15     1 1    
#> 2 B             24     3 0.3  
#> 3 B             26     7 0.7  
#> 4 C             27    10 0.833
#> 5 C             28     2 0.167