为什么此代码会引发IndexOutOfBounds错误?

时间:2019-11-30 18:09:32

标签: c# indexoutofboundsexception

当尝试将列表分成两半时,请使用C#中的GetRange函数。运行以下代码时;

Console.WriteLine(cardDeck.Count());
List<card> cardDeckDuplicate = cardDeck.GetRange(0, 26);
Console.WriteLine(cardDeckDuplicate.Count());
List<card> cardDeckDuplicate2 = cardDeck.GetRange(27, cardDeck.Count - 1);
Console.WriteLine(cardDeckDuplicate2.Count());

我要拆分的列表是cardDeck,而card是用户创建的对象。该程序的输出是 52, 26 然后,它会引发超出范围的错误。 有人可以建议原因吗?将不胜感激。

2 个答案:

答案 0 :(得分:1)

List<T>.GetRange()的第二个参数是您要提取的元素数,而不是您想要的最后一个元素的索引。

所以这应该起作用:

List<card> cardDeckDuplicate2 = cardDeck.GetRange(27, cardDeck.Count - 27); // instead of -1

答案 1 :(得分:1)

某种索引超出范围时,将引发IndexOutOfBounds异常。在您的代码中,问题应该在第四行,您可能应该写GetRange(27, cardDeck.Count - 1)而不是GetRange(27, cardDeckCount - 27)