可能重複:
Why does Enumerable.All return true for an empty sequence?爲什麼這個條件返回true?
代碼:
var line = "name:";
Console.Write(line.Split(new char[] { ':' })[1].All(char.IsDigit));
它是如何可能的?它不應該返回false? :
之後是一個空字符串。
可能重複:
Why does Enumerable.All return true for an empty sequence?爲什麼這個條件返回true?
代碼:
var line = "name:";
Console.Write(line.Split(new char[] { ':' })[1].All(char.IsDigit));
它是如何可能的?它不應該返回false? :
之後是一個空字符串。
真如果源序列的每個元件通過在 指定的謂詞,或者如果序列的測試是空;否則,是錯誤的。
這是因爲兩個原因:
正如你幻象編輯更新提到,你的索引條件抓住由開始Split
(C#計數返回數組中的秒進入0)
var parts = line.Split(new char[] { ':' });
// parts[0] == "name";
// parts[1] == "";
Enumerable.All<TSource>(...)
返回true
如果輸入序列爲空
返回值
類型:System.Boolean 如果源序列的每個元素在經過指定的謂詞的測試爲真,或者如果該序列是空的;否則,是錯誤的。
這是一個vacuously true表達。
所有的字符都是數字,因爲你找不到反例。此代碼:
return s.All(char.IsDigit);
大致相當於這個循環:
foreach (char c in s)
{
if (!char.IsDigit(c)) { return false; }
}
return true;
在這種重寫的版本,它應該清楚的是,如果有字符串中沒有字符,那麼循環體將永遠不會進入和所以結果是真的。
Upvote for good Wikipedia link,never know that have a name :) –