我试图将用户输入读入字符串列表,但在输入第一个值时出错:
索引必须在List.Parameter名称的范围内:index
问题在于行games.Insert(e, f);
它不允许我存储值。发生异常时{}调用Insert
:
games.Insert(1, "test");
完整代码:
static void Main(string[] args)
{
char g = 'w';
string f;
List<string> games = new List<string>();
for (int e = 1; e <= 10; e++)
{
Console.WriteLine("what are your favorite game" + e);
f = (Console.ReadLine()).ToString();
games.Insert(e, f);
}
while (g != 'q')
{
Console.WriteLine("A for adding a game Q for quiting");
g = char.Parse(Console.ReadLine());
if (g == 'a')
{
games.Add(Console.ReadLine());
}
}
}
答案 0 :(得分:1)
更改
for (int e = 1; e <= 10; e++)
到
for (int e = 0; e <= 9; e++)
如果列表为空,则无法在索引1处插入。
答案 1 :(得分:0)
问题在循环中,你从1开始,并尝试在第一次在索引1中插入。但是如果列表超过它的大小,则列表不能插入索引。所以,从0索引开始循环。
for (int e = 0; e < 10; e++)
{
Console.WriteLine("what are your favorite game" + e);
f = Console.ReadLine();
games.Insert(e, f);
}
参考。列出Insert
方法:
public void Insert(int index, T item)
{
if ((uint) index > (uint) this._size)
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_ListInsert);
if (this._size == this._items.Length)
this.EnsureCapacity(this._size + 1);
if (index < this._size)
Array.Copy((Array) this._items, index, (Array) this._items, index + 1, this._size - index);
this._items[index] = item;
this._size = this._size + 1;
this._version = this._version + 1;
}
你可以看到,它首先检查索引。
答案 2 :(得分:0)
games.Insert(e,f)无效,因为您无法在不存在的索引上插入项目。
games.Add(f)将起作用,因为Add()方法按顺序将项添加到列表中。它生成列表的下一个索引并为其分配新值。
只有在已使用Add()方法在索引处添加值时,插入(索引,值)才有效。请参阅List.Insert Method