可能重复:
Why does Enumerable.All return true for an empty sequence?
代码:
var line = "name:";
Console.Write(line.Split(new char[] { ':' })[1].All(char.IsDigit));
怎么可能?它不应该返回虚假?在:
之后是一个空字符串。
答案 0 :(得分:15)
如果源序列的每个元素都通过了测试,则为true 指定谓词,或序列为空;否则,错误。
答案 1 :(得分:8)
这是一个vacuously true表达式。
所有字符都是数字,因为您找不到反例。这段代码:
return s.All(char.IsDigit);
大致相当于这个循环:
foreach (char c in s)
{
if (!char.IsDigit(c)) { return false; }
}
return true;
在这个重写版本中,应该很清楚,如果字符串中没有字符,那么循环体将永远不会被输入,因此结果为真。
答案 2 :(得分:6)
这是因为两个原因:
如幻像编辑更新中所述,您的索引条件会抓取Split
返回的数组中的第二个条目(C#计数从0)
var parts = line.Split(new char[] { ':' });
// parts[0] == "name";
// parts[1] == "";
Enumerable.All<TSource>(...)
返回true
返回值
类型:System.Boolean 如果源序列的每个元素都通过指定谓词中的测试,或者序列为空,则返回true;否则返回false。否则,错误。