Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的'Enumerable.Range(,)'上发生了什么?_C#_Linq_Indexoutofboundsexception - Fatal编程技术网

C# 我的'Enumerable.Range(,)'上发生了什么?

C# 我的'Enumerable.Range(,)'上发生了什么?,c#,linq,indexoutofboundsexception,C#,Linq,Indexoutofboundsexception,我的可枚举范围发生了什么,? 它生成的数字5030超出范围 sellableItems是一个小列表,我需要从中随机挑选9个项目 代码如下: var targetIndexes = Enumerable.Range(i + 1, sellableItems.Count-1) .OrderBy(x => random.Next()) .Take(9) .ToArray(); for (var j = 0; j < targetIndexes.Leng

我的可枚举范围发生了什么,? 它生成的数字5030超出范围

sellableItems是一个小列表,我需要从中随机挑选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++)
{
     ...
}
该方法包含两个参数——起始值和计数

当您执行以下操作时:Enumerable.Rangei+1,sellableItems.Count-1,您将从值37i+1和4999 sellableItems.Count-1开始


由于对范围的调用中的每个迭代都会将上一个值增加1,除了使用起始值的第一个迭代,因此范围将从37到5035。

什么是i?我猜i==30?Enumerable.Range的第二个参数是count,而不是end Index。第二个参数是count,因此您要求从36开始添加5000,范围为36:5036。只需将其更改为Rangei+1,sellableItems.count-i-1LOL,因此它应该是:Enumerable.Rangei+1,sellableItems.count-i-1。我误触了G点。谢谢你的耐心。我不知道你说的痛点是什么意思。你想使用的范围是多少?我想是的,但是为什么你要在I中添加一个呢?您正在尝试排除前0个索引吗?在包含三项的集合中,Enumerable.Range0,3(其中start是第一个索引,count是数组长度)将返回所有索引。