列表中的每个按顺序是否按照添加顺序返回项目?

时间:2015-10-08 11:44:31

标签: vb.net list foreach vb.net-2010

如果我将项目添加到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()方法是否总是在下一个未使用的最高索引处添加?

1 个答案:

答案 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)