【发布时间】:2012-09-05 15:19:20
【问题描述】:
对于List 对象,我们有一个名为Reverse() 的方法。
它颠倒了“就地”列表的顺序,它不返回任何内容。
对于IEnumerable 对象,我们有一个名为Reverse() 的扩展方法。
它返回另一个 IEnumerable。
我需要逆序遍历一个list,所以不能直接用第二种方法,因为我得到了一个List,不想倒序,只能倒序遍历。
所以我可以这样做:
for(int i = list.Count - 1; i >=0; i--)
或者
foreach(var item in list.AsEnumerable().Reverse())
我发现它的可读性比我有一个 IEnumerable 时要差,就这样做
foreach(var item in list.Reverse())
我不明白为什么这两种方法以这种方式实现,名称相同。这很烦人和令人困惑。
为什么没有一个名为 BackwardsIterator() 的扩展来代替适用于所有 IEnumerable 的 Reverse()?
我对这个选择的历史原因非常感兴趣,而不是“如何做”!
【问题讨论】:
-
你可以使用 Enumerable.Reverse(list)
-
你为什么不把你的列表输入你喜欢的类型,然后它会使用你喜欢的方法的版本?
-
^ 大概他“喜欢”它是
List,因为它是List——但是,正如他明确表示的,他不想使用List.Reverse。 “typed to the type that you like”的意思是强制转换它,这并不比使用AsEnumerable()更漂亮。
标签: c# linq list ienumerable reverse