在列表中存储用户输入会导致索引超出范围错误

时间:2015-10-05 01:23:54

标签: c# list

我试图将用户输入读入字符串列表,但在输入第一个值时出错:

  

索引必须在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());
        }
    }
}

3 个答案:

答案 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