Stack<T>的ToArray方法返回元素顺序是否有官方明确保障?
关于Stack<T>.ToArray()的顺序稳定性
你完全可以放心用现有实现,.NET 基础类库对公开API的行为有严格的向后兼容承诺,不会随意修改这种已经沿用了十几年的核心类行为。
官方文档里的“类似”只是严谨性表述,实际上Stack<T>.ToArray()的LIFO顺序是明确的公开契约:从.NET Framework 2.0 泛型Stack<T>首次发布,到后续所有.NET Core、.NET 5+版本,这个方法的返回顺序始终和连续调用Pop()的顺序完全一致,从未发生过变动。如果微软要修改这个行为,会提前发布正式的废弃通知,几乎不可能直接调整。
无任何顺序疑虑的实现方案
如果你实在对文档的模糊表述不放心,想要100%不受任何版本变动影响,可以利用Stack<T>枚举器的明确规则(官方明确保障枚举按LIFO顺序返回元素,无模糊表述)来实现,方案如下:
简洁版(和你原有逻辑等价,性能一致)
public IEnumerable<Tuple<int, int>> GetAllTuples() { // 枚举默认返回后进先出顺序,反转后就是从旧到新的顺序 return this.Reverse(); }
显式可控版(完全自定义逻辑,无依赖黑箱)
public IEnumerable<Tuple<int, int>> GetAllTuples() { var result = new List<Tuple<int, int>>(this.Count); foreach (var item in this) { // 每次把新枚举到的(后进栈的)元素插到列表头部,最终列表就是从旧到新的顺序 result.Insert(0, item); } return result; }
内容的提问来源于stack exchange,提问作者MechMK1
相关产品推荐
相关产品推荐

