如果我将项目添加到List(Of T)
然后使用For Each
来迭代它们,是否可以保证按照添加的顺序访问它们?
或者就此而言,它们是否与添加顺序相关的索引中添加了? (即在索引0处是第一个添加的对象,在索引1处是第二个,等等)
例如:以下代码是否可以保证从两个循环中打印输出“0 1 2”?
Private MyList As New List(Of Integer)
MyList.Add(New Integer(0))
MyList.Add(New Integer(1))
MyList.Add(New Integer(2))
For Each n As Integer In MyList
Console.Write(n.ToString & " ")
Next
For i As Integer = 0 To MyList.Count - 1
Console.Write(MyList(i).ToString & " ")
Next
编辑:感谢您指出此问题的第一部分已由In what order does a C# for each loop iterate over a List<T>?
回答然而,第二部分进一步限定了这个问题。链接的问题表明是的,For Each
从索引0
迭代到索引count - 1
。但是.Add()方法是否总是在下一个未使用的最高索引处添加?
答案 0 :(得分:1)
是的,每个添加到List的元素都会获得更高的索引。所以首先是0,第二个1等 Foreach将始终从开头到结尾循环列表。如果你想从最后做到这一点,你可以使用例如FOR循环,或者你可以按你喜欢的方式对列表进行排序(f.e.LINQ)。
验证这一点的最简单方法就是简化代码。 使用您提供的代码(进行少量编辑):
Sub Main()
Dim MyList As New List(Of Integer)
MyList.Add(0)
MyList.Add(1)
MyList.Add(2)
For Each n As Integer In MyList
Console.Write(n.ToString & " ")
Next
For i As Integer = 0 To MyList.Count - 1
Console.Write(MyList(i).ToString & " ")
Next
Console.Read()
End Sub
输出将是:
0 1 2 0 1 2
如果您想在中间某处插入元素,可以使用:
MyList.Insert(position, value)