C# 我的'Enumerable.Range(,)'上发生了什么?
我的可枚举范围发生了什么,? 它生成的数字5030超出范围 sellableItems是一个小列表,我需要从中随机挑选9个项目 代码如下: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
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是数组长度)将返回所有索引。