List <t>获取随机元素不起作用

时间:2015-08-16 19:33:34

标签: c#

我有以下代码:

    private Random r = new Random();

    private List<T> RandomElement<T>(IQueryable<T> list, Expression<Func<T, bool>> e, int items = 3)
    {
        list = list.Where(e);
        return list.Skip(r.Next(list.Count())).Take(items).ToList();
    }    

问题是当我打电话给它并希望例如从列表中返回3个随机项时,有时返回3有时2,有时1?

我希望在任何时候都能得到3。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果您的列表中有10个元素,并且您要求3个“随机”项目,则在您的解决方案中,如果随机数生成器返回8,则跳过前8个元素并且它只有2个可用于返回的项目(项目) 9和10)。这就是它发生的原因。

如果您想要随机项目,而不是随机播放列表而不跳过任何项目,只需获取您想要的数字。

Randomize a List<T>