C# 三值操作的LINQ操作,如果逻辑被交换,导致测试失败

C# 三值操作的LINQ操作,如果逻辑被交换,导致测试失败,c#,linq,C#,Linq,因此,我使用LINQ对字符串求值,并使用正则表达式库解析数字字符串或任何其他返回0的字符。如果我交换逻辑,它应该仍然可以工作,但它不。。。下面是两个场景的示例 这个例子允许我的测试通过 返回Regex.Split(数字@“[^\d-]”) .Select(d=>Regex.IsMatch(d,@“[\d-]”)int.Parse(d.TrimEnd('-')):0) .Where(d=>d Regex.IsMatch(d,@“[^\d-]”)0:int.Parse(d.TrimEnd('-'))

因此,我使用LINQ对字符串求值,并使用正则表达式库解析数字字符串或任何其他返回0的字符。如果我交换逻辑,它应该仍然可以工作,但它不。。。下面是两个场景的示例

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

返回Regex.Split(数字@“[^\d-]”)
.Select(d=>Regex.IsMatch(d,@“[\d-]”)int.Parse(d.TrimEnd('-')):0)
.Where(d=>d Regex.IsMatch(d,@“[^\d-]”)0:int.Parse(d.TrimEnd('-'))

。其中(d=>d问题在于您实际上没有交换第二行代码中的逻辑。要完全交换逻辑,您需要否定
if
语句,如下所示:

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

。其中(d=>d问题在于您实际上没有交换第二行代码中的逻辑。要完全交换逻辑,您需要否定
if
语句,如下所示:

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

.Where(d=>d)您能提供您得到的异常吗?
IsMatch
只是确保您的表达式存在于某个地方。因此像“A1”这样的值将同时匹配
[\d-]
[\d-]
因为它有一个数字,而它的值不是一个数字或破折号。引发的异常是一个解析异常,d的格式不正确。您能提供您得到的异常吗?
IsMatch
只是确保表达式存在于某个地方。因此像“A1”这样的值将匹配这两个
[\d-]
[\d-]
因为它有一个数字,而它的值不是一个数字或破折号。引发的异常是一个解析异常,d的格式不正确。就是这样!我的大脑一团糟…谢谢你的帮助!就是这样!我的大脑一团糟…谢谢你的帮助!
return Regex.Split(number, @"[^\d-]")
            .Select(d => !Regex.IsMatch(d, @"[^\d-]") ? 0 : int.Parse(d.TrimEnd('-')))
            .Where(d => d <= 1000).ToList();