rav*_*ven 15 .net collections foreach
一位同事使用for循环在他编写的一些C#代码中迭代List并留下评论,"没有使用For Each,因为我不确定它是否按顺序迭代.谁知道微软会做什么." 例如,假设我们有一个像这样构建的List:
var someList = new List<string>();
someList.Add("one");
someList.Add("two");
someList.Add("three");
Run Code Online (Sandbox Code Playgroud)
我的同事使用了这样的东西:
for (int i = 0; i < someList.Count; i++)
{
System.Diagnostics.Debug.WriteLine(someList[i]);
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
foreach (var item in someList)
{
System.Diagnostics.Debug.WriteLine(item);
}
Run Code Online (Sandbox Code Playgroud)
我猜他担心这些物品可能会以不同于添加到集合中的顺序出现.我认为他有点偏执,但从技术上讲,文档并没有说明集合迭代的顺序.foreach语句是否有可能以最低限度到最高限度之外的任何顺序遍历数组或集合对象?
Rex*_*x M 33
你的问题是关于a List<T>,它确实维持秩序.
独自一人,不能保证做任何事情.它只是询问为其枚举器提供的对象,它可以做任何事情.
Jon*_*eet 23
这取决于集合:
List<T>它保证是插入订单.(这是假设只是Add调用,如图所示.如果插入的元素到列表中在特定的地方,他们会得到在适当的管制站返回你所期望的.)它基本上是相同的顺序你会采取让list[0],list[1],list[2]等.Dictionary<TKey, TValue>没有保证订购.SortedList<TKey, TValue>(等)它将处于关键比较顺序 - 这就是类型的要点.