C# List.Insert 缺少一些索引
C# List.Insert misses some indexes
我有一个叫 stringList
的 List<string>
。我试图在列表中插入一些字符串。首先,我使用 for 循环为我的内容生成 "empty places"。
for (int i = 0; i < 60; i++)
{
stringList.Add(null);
}
然后我使用stringlist.Insert(index, element)
在指定索引处插入一个元素到列表中。接下来我想看看是否每个元素都被正确读取了。
这是我的 stringList
:
每个元素都读对了,但是少了三个索引。第 3 个索引应该是第 6 个,第 4 个 -> 第 7 个等等。
我不知道如何解决这个问题。
这是代码片段(索引 3、4、5),程序在其中读取元素并将其插入到列表中。
case "yweather:wind":
stringList.Insert(3, reader["speed"]);//3
break;
case "yweather:atmosphere":
stringList.Insert(4, reader["pressure"]);//4
stringList.Insert(5, reader["rising"]);//5
stringList.Insert(6, reader["humidity"]);//6
break;
对不起我的英语。
因为方法 Insert() 确实是 'inserts' 个元素。让我解释一下..
假设下面是一个列表;
1 2 3
如果在2中插入元素4,结果是这样的;
1 2 4 3
这是你的错误。
List.Insert
将在给定索引处向列表添加一个元素 并移动以下所有元素.
您可能只想在插入 null
元素时设置给定的索引。如果是这样,请改用此语法:
stringList[3] = reader["speed"]; // etc
但是正如你预先知道你想要的容量,最好只使用一个简单的数组,这样你就不必用空项目初始化列表:
var stringList = new string[60];
然后使用相同的语法 (stringList[i] = whatever;
) 填充它。
如果您必须使用 List<T>
(例如,如果您稍后添加其他元素),那么至少使用 constructor 可以让您预先分配一些 space前面:
var stringList = new List<string>(60);
我有一个叫 stringList
的 List<string>
。我试图在列表中插入一些字符串。首先,我使用 for 循环为我的内容生成 "empty places"。
for (int i = 0; i < 60; i++)
{
stringList.Add(null);
}
然后我使用stringlist.Insert(index, element)
在指定索引处插入一个元素到列表中。接下来我想看看是否每个元素都被正确读取了。
这是我的 stringList
:
每个元素都读对了,但是少了三个索引。第 3 个索引应该是第 6 个,第 4 个 -> 第 7 个等等。
我不知道如何解决这个问题。
这是代码片段(索引 3、4、5),程序在其中读取元素并将其插入到列表中。
case "yweather:wind":
stringList.Insert(3, reader["speed"]);//3
break;
case "yweather:atmosphere":
stringList.Insert(4, reader["pressure"]);//4
stringList.Insert(5, reader["rising"]);//5
stringList.Insert(6, reader["humidity"]);//6
break;
对不起我的英语。
因为方法 Insert() 确实是 'inserts' 个元素。让我解释一下..
假设下面是一个列表;
1 2 3
如果在2中插入元素4,结果是这样的;
1 2 4 3
这是你的错误。
List.Insert
将在给定索引处向列表添加一个元素 并移动以下所有元素.
您可能只想在插入 null
元素时设置给定的索引。如果是这样,请改用此语法:
stringList[3] = reader["speed"]; // etc
但是正如你预先知道你想要的容量,最好只使用一个简单的数组,这样你就不必用空项目初始化列表:
var stringList = new string[60];
然后使用相同的语法 (stringList[i] = whatever;
) 填充它。
如果您必须使用 List<T>
(例如,如果您稍后添加其他元素),那么至少使用 constructor 可以让您预先分配一些 space前面:
var stringList = new List<string>(60);