为什么我在列表中获得ArgumentOutOfRangeException?

时间:2015-07-02 14:38:41

标签: c# .net list

我在项目中使用列表列表。当我运行程序时,我得到ArgumentOutOfRangeException。但是列表中没有指定范围。 我宣布这样的名单:

public static List<List<string>> list = new List<List<string>>();

现在我想在第一个&#34;列表中添加我的名字&#34;在列表清单中。

list[0].Add("Hussam"); //Here i get ArgumentOutOfRange Exception.

我现在该怎么办?

7 个答案:

答案 0 :(得分:11)

  

但是列表中没有指定范围

不,指定了索引(作为参数),以及超出范围的内容。看看你的代码:

list[0].Add("Hussam");

尝试使用list中的第一个列表 - 但list为空, 没有第一个元素。索引器的有效参数范围基本上是空的。

首先你要:

list.Add(new List<string>());

现在list[0]会正确引用您的空List<string>,因此您可以向其添加"Hussam"

答案 1 :(得分:2)

您想要将项目添加到空列表中的第一项...这样做无效。首先,将列表添加到另一个列表中:

public static List<List<string>> list = new List<List<string>>();

List<string> innerList = new List<string>();
list.Add(innerList);

innerList.Add("Hussam");

答案 2 :(得分:0)

您无法访问list[0],因为索引0处没有项目。列表为空。

你需要像这样添加一个新的List:

list.Add(new List<string> { "Hussam" });

或者,将列表分配给索引0,然后根据您发布的代码添加到该列表中:

list.Add(new List<string>());
list[0].Add("Hussam");

如果您不总是知道列表是否为空,您可以使用FirstOrDefault(LINQ方法)检查​​索引0处是否有任何条目,如果没有,则分配一个,否则使用现有的内部清单:

var innerList = list.FirstOrDefault();
if (innerList == null)
{
    innerList = new List<string>();
    list.Add(innerList);
 }

 innerList.Add("Hussam");

答案 3 :(得分:0)

为什么要创建列表列表?列出不够吗?这里发生的是内部列表没有被初始化。

list.Add(new List<string>());
list[0].Add("Jimmy");

答案 4 :(得分:0)

问题是,您的嵌套列表尚未初始化,任何

因此,调用嵌套列表的第一项正确地告诉您其中没有任何内容。

验证:

int superlistCounter = 1;
int sublistCounter = 1;

foreach(var sublist in list)
{
   Console.WriteLine("Now in List #" + superlistCounter);
   foreach(var item in sublist)
   {
       Console.WriteLine("List item #" + sublistCounter + ": " + item)
   }
}

输出将是:

Now in List #1

听起来像是在期待:

Now in List #1
List Item #1: Hussam

要解决此问题,只需初始化您的列表即可!

public static List<List<string>> list = new List<List<string>>();

// ...

List<string> subList1 = new List<string>();
list.Add(subList1);

subList1.Add("Hussam");

答案 5 :(得分:0)

在这种情况下发生异常,因为您尝试访问不存在的索引,然后您必须添加内部初始列表,可以执行以下操作:

list.Add(new new List<string>());

或者,如果您想直接添加名字:

list.Add(new new List<string>(){"Hussam"});

答案 6 :(得分:0)

好的,首先,您必须了解&#34;索引&#34;只有在声明了值之后才会出现。列表表现不同。它们不像数组。您将获得要存储项目的索引,并在执行此操作时使用代码array[index] = value;

但是在List中,要为全新项目赋值,请使用方法Add(value)

所以这里有一个提醒: Systems.Collections.Generic.List&lt;&gt;与array [] s

无关