Linq问题,在List为空时,All 方法返回值为什么是true?

BasicArchitect 2016-07-05 08:44:26
List<int> l2 = new List<int>();
bool ret2 = l2.All(t =>t>10);
Console.WriteLine(ret2);

上面这段代码,ret2值为true,没道理啊,直观感觉应该是false才对。
...全文
231 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
龍过鸡年 2016-07-05
  • 打赏
  • 举报
回复
Enumerable.All 的源码 http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,be4bfd025bd2724c

public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
    if (source == null) throw Error.ArgumentNull("source");
    if (predicate == null) throw Error.ArgumentNull("predicate");
    foreach (TSource element in source) {
        if (!predicate(element)) return false;
    }
    return true;
}
MSDN https://msdn.microsoft.com/zh-cn/library/bb548541(v=vs.110).aspx 备注里有一句 true 如果源序列中的每个元素通过与指定谓词中的测试,或者如果序列为空,则为否则为 false
  • 打赏
  • 举报
回复
换成Any 也行会好理解点。
BasicArchitect 2016-07-05
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
这里由不得你感觉,而是你得去迎合人家的思路(正所谓:吃人家饭,受人家管)
说的也是。
xuzuning 2016-07-05
  • 打赏
  • 举报
回复
这里由不得你感觉,而是你得去迎合人家的思路(正所谓:吃人家饭,受人家管)
BasicArchitect 2016-07-05
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
内部代码应该是 bool istrue=true; foreach(){ if(false){ istrue=false;break;} } 所以没值时就返回true了
这是个坑,直观感觉应该反悔false
  • 打赏
  • 举报
回复
内部代码应该是 bool istrue=true; foreach(){ if(false){ istrue=false;break;} } 所以没值时就返回true了

111,095

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧