我正在尝试查找是否可以在列表中的特定位置添加项目。 例子
string[] tokens= new string[10];
tokens[5]="TestString";
当我尝试列出它时
List<string> mitems = new List<string>();
mitems.Insert(5, "TestString");
我的列表索引内的错误列表超出范围。 列表是否与此相对?
答案 0 :(得分:1)
使用Insert(index, item);
方法。
请查看MSDN Insert,以了解更多信息。
但是,当您尝试在不存在的索引处插入项目时会出现错误。
您可以像使用数组一样使用10个空值来初始化列表,但是如果使用Insert
,则会创建一个新条目,而不是像字典那样替换旧条目。那意味着您第一次使用Insert
此示例代码
var items = new List<string>();
items.AddRange(Enumerable.Repeat(string.Empty, 10));
Console.WriteLine(items.Count);
items.Insert(5, "TestString");
Console.WriteLine(items.Count);
提供此输出(以便更好地理解):
10
11
答案 1 :(得分:0)
您可以使用List
var tokens = new List<string>();
for (int i = 0; i < 10; i++)
tokens.Add(string.Empty);
tokens.Insert(5, "TestString");
请参见MSDN
编辑: 如果您只是尝试替换索引为5的项目,则[]也可以完成以下示例:
var tokens = new List<string>(10);
for (int i = 0; i < 10; i++)
tokens.Add(string.Empty);
tokens[5] = "TestString";
答案 2 :(得分:0)
private static void Myfunc()
{
List<string> l = new List<string>();
string opt = "y";
while (opt == "y")
{
Console.WriteLine("Do you want to add in a specific position? (y/n)");
string pos = Console.ReadLine();
if (pos == "y")
{
Console.WriteLine("Which index you want to add?");
int index = Convert.ToInt16(Console.ReadLine());
Console.WriteLine("Add items in {0}", index);
l.Insert(index, Console.ReadLine());
}
else
{
Console.WriteLine("Enter to add in a list");
l.Add(Console.ReadLine());
Console.WriteLine("Do you wish to continue? (y/n)");
opt = Console.ReadLine();
}
Console.WriteLine("Do you want to print the list? (y/n)");
string print = Console.ReadLine();
if (print == "y")
{
foreach (var item in l)
{
Console.WriteLine(item);
}
}
}
我为您编写了此功能。 将此功能添加到控制台应用程序可更好地了解列表如何用于插入和追加
编辑1:
我刚刚看到了您的编辑,另一种使用默认值初始化列表然后在特定位置插入内容的方法是初始化列表,如下所示:-
List<string> l = Enumerable.Repeat("something blank", 10).ToList();
然后添加到您选择的索引
答案 3 :(得分:0)
以下在0-9的每个索引处添加字符串的默认值
string[] tokens= new string[10];
但是列表是在堆上创建的,没有实例化。没有默认分配的值。
List<string> mitems = new List<string>();
如果您尝试执行以下操作,则会失败,因为0-5处没有值
mitems.Insert(5, "TestString");
如果您遵循它,将会工作
mitems.Insert(0, "TestString");