如何以相反的顺序迭代.Net IList集合?

时间:2020-03-06 14:20:26  来源:igfitidea点击:

我有一个包含项的IList(首先是父项),需要以相反的顺序将它们添加到关系图文档中,以便最后添加父项,并在顶部绘制,以便它是用户首先选择的东西。

最好的方法是什么?比我目前做的更好/更优雅的东西
我在下面发布

解决方案

NewItems是我的列表在这里...虽然有点笨拙。

for(int iLooper = obEvtArgs.NewItems.Count-1; iLooper >= 0; iLooper--)
            {
                GoViewBoy.Document.Add(CreateNodeFor(obEvtArgs.NewItems[iLooper] as IMySpecificObject, obNextPos));
            }

如果我们拥有.NET 3.5,则可以使用LINQ的Reverse吗?

foreach(var item in obEvtArgs.NewItems.Reverse())
{
   ...
}

(假设我们正在谈论通用的IList)

根据对Davy答案的评论以及Gishu的原始答案,我们可以使用System.Linq.Enumerable.Cast扩展方法将弱类型的System.Collections.IList转换为通用集合:

var reversedCollection = obEvtArgs.NewItems
  .Cast<IMySpecificObject>( )
  .Reverse( );

这消除了反向" for"循环和" as"强制从原始集合中获取强类型对象的噪声。