根据随机值选择列表的子集

时间:2017-01-30 13:40:14

标签: c# linq

我想做的是:

var rnd = new Random();
var list1Data = ...; //100 elements
var list2Data = list1Data.Where(_ => rnd.NextDouble() > 0.1);

换句话说,大约90%的列表项应该被选中,大约10%不是......它只是模拟一个有缺陷的设备。

但我得到了100%的退货。我该如何解决这个问题?

更新 当我查看调试器时,它显示list2.Count与list1.Count相同但是当我展开结果视图时,它显示的元素更少......即它正在按预期进行,但调试器显示的是令人困惑的信息。

enter image description here

在此示例中,展开Results View显示从运行到运行的大约90个元素,但Count显示100个。

这是System.Linq.Enumerable.WhereListIterator中的错误还是我的误解?

1 个答案:

答案 0 :(得分:1)

您正在查看WhereListIterator. source .Count

鉴于source字段包含对其将要迭代的List<T>的引用,它会向您显示源集合的计数,而不是过滤集合的计数。

没有属性或字段指示后者的计数,因为只有在遍历整个源集合之后才会知道,并且在您实际执行此操作之前它们会被推迟,例如使用{{1} }。