IEnumerable.ElementAt-存在值时参数超出范围异常

Jor*_*nGW 2 c# ienumerable exception

我有一段代码,它从列表的计数(-1)中获取一个随机数,然后在该索引处获取元素。然后,我从该列表中删除该对象,并调用代码,直到所有对象都从该列表中消失为止。

我对如何有13个索引(0-12)感到困惑,我用来获取元素的整数是11。这怎么可能超出有效值范围?

private Player GetRandomPlayer(List<Player> entries)
{
            var rIdx = rnd.Next(entries.Count - 1);
            var player = entries.Where(i => i.Seed == null).ElementAt(rIdx);
            entries.Remove(player);

            return player;            
}
Run Code Online (Sandbox Code Playgroud)

异常和测试用例的图像:

列出13个值:https//ibb.co/wQdq1q4

包括用于获取值的int的异常:https : //ibb.co/mJXwMFh

Ren*_*ogt 5

ElementAt()方法适用于您的Where子句的返回值。如果少于rIdx+1元素,Seed == null则会出现异常。

通过假设您要实现的目标,我认为这应该可行:

// filter list
var nullEntries = entries.Where(i => i.Seed == null).ToList();

// use only filtered values
var rIdx = rnd.Next(nullEntries.Count - 1);
var player = nullEntries[rIdx];
entries.Remove(player);
Run Code Online (Sandbox Code Playgroud)