我想做的是:
var rnd = new Random();
var list1Data = ...; //100 elements
var list2Data = list1Data.Where(_ => rnd.NextDouble() > 0.1);
换句话说,大约90%的列表项应该被选中,大约10%不是......它只是模拟一个有缺陷的设备。
但我得到了100%的退货。我该如何解决这个问题?
更新 当我查看调试器时,它显示list2.Count与list1.Count相同但是当我展开结果视图时,它显示的元素更少......即它正在按预期进行,但调试器显示的是令人困惑的信息。
在此示例中,展开Results View
显示从运行到运行的大约90个元素,但Count
显示100个。
这是System.Linq.Enumerable.WhereListIterator中的错误还是我的误解?
答案 0 :(得分:1)
您正在查看WhereListIterator.
source
.Count
。
鉴于source
字段包含对其将要迭代的List<T>
的引用,它会向您显示源集合的计数,而不是过滤集合的计数。
没有属性或字段指示后者的计数,因为只有在遍历整个源集合之后才会知道,并且在您实际执行此操作之前它们会被推迟,例如使用{{1} }。