假设我有一个给定的集合。在不以任何方式更改集合的情况下,我使用 foreach 循环遍历其内容两次。除非有宇宙射线之类的东西,是否绝对保证两个循环中的顺序一致?
或者,给定一个HashSet<string>
对于多个元素,什么会导致以下注释行的输出不相等:
{
var mySet = new HashSet<string>();
// Some code which populates the HashSet<string>
// Output1
printContents(mySet);
// Output2
printContents(mySet);
}
public void printContents(HashSet<string> set) {
foreach(var element in set) {
Console.WriteLine(element);
}
}
如果我能得到一个一般性的答案来解释导致实现不满足上述标准的原因,那将会很有帮助。但具体来说,我感兴趣的是Dictionary
, List
和数组。
数组枚举保证顺序。
List
and List<T>
预计将提供稳定的顺序(因为预计它们将实现顺序索引元素)。
Dictionary、HashSet 都明确不保证顺序。连续两次调用迭代项目不太可能以不同的顺序返回项目,但没有保证或期望。人们不应该期待任何特定的顺序。
Dictionary/HashSet 的排序版本按排序顺序返回项目。
其他 IEnumerable 对象可以自由地做任何他们想做的事情。通常,人们以符合用户期望的方式实现迭代器。 IE。如果提供显式顺序,则具有隐式顺序的事物的枚举应该是稳定的 - 预期是稳定的。对未指定顺序的数据库的查询应该以半随机顺序返回项目。
检查此问题的链接:C# 中的 foreach 循环是否保证计算顺序? https://stackoverflow.com/questions/3097769/does-the-foreach-loop-in-c-sharp-guarantee-an-order-of-evaluation?rq=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)