将文本框值添加到列表

时间:2013-10-25 20:14:36

标签: c# list

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.

为什么?

5 个答案:

答案 0 :(得分: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));

答案 1 :(得分:4)

使用

创建新列表
new List<int>();

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

使用[0],您试图将元素放在位置0处。零大小的列表没有0索引 - &gt;指数超出范围

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

在这种情况下,它将是:

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

添加确实会在列表末尾添加值。

  

是的,但如果我必须将值添加到特定列表值,那该怎么办?   说明了吗?

因为您似乎想要在特定索引处添加值。如果您在设计时知道List的大小,则应考虑使用Array而不是List。

答案 2 :(得分:4)

您需要将.Add()文本框的值List发送到List<int> MyLottoNumbers = new List<int>(); MyLottoNumbers.Add(int.Parse(textBoxNum1.Text); 。像这样:

new

List向上.Add()时,它的大小设置为0,直到你{{1}}项为止。

答案 3 :(得分: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.
}

答案 4 :(得分:3)

如果您阅读了异常消息,则说:

  

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

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

  

公开名单()       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);

NB: List和数组之间的差异之一:列表在创建时为空,而数组则不是。所以你可以使用数组重写你的例子:

int[] MyLottoNumbers = new int[25];

MyLottoNumbers[0] = int.Parse("5");