2
List<int> MyLottoNumbers = new List<int>();
MyLottoNumbers[0] = int.Parse(textBoxNum1.Text);

textBoxNum1 的值为 5

此代码给出了错误

Index was out of range. Must be non-negative and less than the size of the collection.

为什么 ?

4

5 回答 5

4

这是因为您的列表当前是空的,所以您不能将第一个索引设置为某些东西(因为它不存在)。如果你这样做:

List<int> MyLottoNumbers = new List<int>();
MyLottoNumbers.Add(int.Parse("5"));
MyLottoNumbers[0] = int.Parse("7");

它有效,因为已设置该索引。

如果要在前面插入,请走这条路线:

List<int> MyLottoNumbers = new List<int>();
MyLottoNumbers.Insert(0, int.Parse(textBoxNum1.Text));
于 2013-10-25T20:18:57.830 回答
4

创建一个新列表

new List<int>();

创建一个大小为 0 的列表(http://msdn.microsoft.com/en-us/library/4kf43ys3(v=vs.110).aspx)。

使用 [0] 您试图在位置 0 处获取元素。大小为零的列表没有 0 索引 - > 超出范围的索引

有关如何使用 List 的示例,请参见http://www.dotnetperls.com/list 。

在这种情况下,它将是:

MyLottoNumbers.Add(int.Parse(textBoxNum1.Text));

Add 确实将值添加到列表的末尾。

是的,但是如果我必须向特定的列表值添加一个值,如图所示?

看起来您想在特定索引处添加值。如果您在设计时知道 List 的大小,则应该考虑使用 Array 而不是 List。

于 2013-10-25T20:20:32.267 回答
4

您需要将.Add()文本框的值添加到您的List. 像这样:

List<int> MyLottoNumbers = new List<int>();
MyLottoNumbers.Add(int.Parse(textBoxNum1.Text);

当您new启动 aList时,它的大小设置为 0,直到您.Add()向它添加项目。

于 2013-10-25T20:20:41.247 回答
3

如果您阅读异常消息,它会显示:

指数超出范围。必须是非负数且小于集合的大小

发生这种情况是因为当创建的 List 有 0 个元素长度(检查 MyLottoNumbers.Count)。这在构造函数的摘要中有所说明:

public List() System.Collections.Generic.List 的成员

摘要:初始化 System.Collections.Generic.List 类的新实例,该实例为空且具有默认初始容量。

您正在尝试使用索引器:

public T this[int index] { set; 得到; System.Collections.Generic.List 的成员

摘要:获取或设置指定索引处的元素。

将元素设置在位置 0。但是,您会遇到异常,因为实际上位置 0 处还没有元素(因为列表为空)。

执行时列表大小会增加MyLottoNumbers.Add

你真正需要做的是:

MyLottoNumbers.Add(int.Parse(textBoxNum1.Text);

注意:这是列表和数组之间的区别之一:列表在创建时是空的,而数组不是。因此,您可以使用数组重写您的示例:

int[] MyLottoNumbers = new int[25];

MyLottoNumbers[0] = int.Parse("5");
于 2013-10-25T20:29:51.747 回答
3

尝试使用 Regex 和 linq 创建和解析列表。

请注意,它假定用户正在输入空格以进行拆分,例如“5 12 15”:

if (string.IsNullOrWhiteSpace(textBoxNum1.Text) == false)
{
   MyLottoNumbers = Regex.Matches(textBoxNum1.Text, @"([^\s]+)\s*")
                         .OfType<Match>()
                         .Select(mt => int.Parse(mt.Groups[0].Value))
                         .ToList();
}
else
{
  MyLottoNumbers = new List<int>(); // Create empty list as to not throw an exception.
}
于 2013-10-25T20:27:43.003 回答