首页 > 解决方案 > 我的 `Enumerable.Range(,)` 发生了什么?

问题描述

我的怎么了Enumerable.Range(,)?它产生了一个超出范围的数字 5030。

sellableItems很小List<T>,我需要从中随机挑选9个项目。

这是代码:

var targetIndexes = Enumerable.Range(i + 1, sellableItems.Count-1)
      .OrderBy(x => random.Next())
      .Take(9)
      .ToArray();

for (var j = 0; j < targetIndexes.Length; j++)
{
     ...
}

在此处输入图像描述

标签: c#linqindexoutofboundsexception

解决方案


Enumerable.Range方法接受两个参数——一个起始值和一个计数。

当您这样做时:Enumerable.Range(i + 1, sellableItems.Count - 1),您将从值37( i + 1) 和 ( ) 计数4999开始sellableItems.Count - 1

由于调用中的每次迭代Range都会将前一个值增加一个(第一次迭代除外,它使用起始值),范围将是 from375035


推荐阅读