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.
为什么?
答案 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");