Linq对于空的集合Enumerable.All返回True

今天在查一个bug的时候,发现是一段代码中Enumerable.All对于空的集合返回True造成的。

 

测试下:

List<string> emptyList = new List<string>();

Console.WriteLine(emptyList.All(p => p == “1”));

 

以上代码输出True。

 

因为在我写那段代码的时候,没注意过Enumerable.All在空集合下的行为,而 期望对于空的应该返回False,所以就出了问题。

 

仔细看了Enumerable.All的注释,确实有特别的说明:

 

// Returns:

//     true if every element of the source sequence passes the test in the specified

//     predicate, or if the sequence is empty; otherwise, false.

 

至于为什么要在集合为空的情况下,Enumerable.All要返回True,大家有兴趣的可以去google下,有很多种解释,专业的解释其实这个是一个有趣的数学逻辑问题。

呵呵,这里我不再叙述,只是写下这篇文章记录下。

 

对了,类似的还有:

“abc”.StartsWith(string.Empty)

原创文章,转载请注明: 转载自闲云博客

本文链接地址: Linq对于空的集合Enumerable.All返回True

发表评论

电子邮件地址不会被公开。 必填项已用*标注