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.
为什么 ?
这是因为您的列表当前是空的,所以您不能将第一个索引设置为某些东西(因为它不存在)。如果你这样做:
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));
创建一个新列表
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。
您需要将.Add()
文本框的值添加到您的List
. 像这样:
List<int> MyLottoNumbers = new List<int>();
MyLottoNumbers.Add(int.Parse(textBoxNum1.Text);
当您new
启动 aList
时,它的大小设置为 0,直到您.Add()
向它添加项目。
如果您阅读异常消息,它会显示:
指数超出范围。必须是非负数且小于集合的大小
发生这种情况是因为当创建的 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");
尝试使用 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.
}