我在项目中使用列表列表。当我运行程序时,我得到ArgumentOutOfRangeException
。但是列表中没有指定范围。
我宣布这样的名单:
public static List<List<string>> list = new List<List<string>>();
现在我想在第一个&#34;列表中添加我的名字&#34;在列表清单中。
list[0].Add("Hussam"); //Here i get ArgumentOutOfRange Exception.
我现在该怎么办?
答案 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
无关