具有三元操作的LINQ操作导致在交换逻辑时测试失败

时间:2017-09-29 13:09:32

标签: c# linq

所以我使用LINQ来计算一个字符串并使用Regex库来解析一个数字的字符串或任何其他字符返回0.如果我交换逻辑,它应该仍然可以工作,但它不会#39 ; t ...下面是两个场景的一个例子。

  

这个例子允许我的测试通过。

return Regex.Split(number, @"[^\d-]")
            .Select(d => Regex.IsMatch(d, @"[\d-]") ? int.Parse(d.TrimEnd('-')) : 0)
            .Where(d => d <= 1000).ToList();
  

逻辑交换,它应该仍然通过,但导致我的几个测试失败...

return Regex.Split(number, @"[^\d-]")
            .Select(d => Regex.IsMatch(d, @"[^\d-]") ? 0 : int.Parse(d.TrimEnd('-')))
            .Where(d => d <= 1000).ToList();

1 个答案:

答案 0 :(得分:4)

问题是您实际上并没有在第二行代码中交换逻辑。要完全交换逻辑,您需要否定List<KeyValuePair<string, string>>语句,如下所示:

if

return Regex.Split(number, @"[^\d-]") .Select(d => !Regex.IsMatch(d, @"[^\d-]") ? 0 : int.Parse(d.TrimEnd('-'))) .Where(d => d <= 1000).ToList(); 之前添加!将为您提供所有非有效数字并返回0的值。