【发布时间】:2012-02-04 07:13:58
【问题描述】:
我有一个自定义类型的 IEnumerable。 (我从 SelectMany 那里得到的)
我在该 IEnumerable 中还有一个项目 (myItem),我希望 IEnumerable 中的上一个和下一个项目。
目前,我正在做这样的事情:
var previousItem = myIEnumerable.Reverse().SkipWhile(
i => i.UniqueObjectID != myItem.UniqueObjectID).Skip(1).FirstOrDefault();
我可以通过简单地省略.Reverse来获得下一个项目。
或者,我可以:
int index = myIEnumerable.ToList().FindIndex(
i => i.UniqueObjectID == myItem.UniqueObjectID)
然后使用.ElementAt(index +/- 1) 获取上一项或下一项。
- 这两个选项哪个更好?
- 还有更好的选择吗?
“更好”包括性能(内存和速度)和可读性的组合;可读性是我最关心的问题。
【问题讨论】:
-
考虑到可读性,您的第一个选项很棒!比答案要好得多。会用!谢谢!
-
我同意@Aleksei,也使用那个
-
我的回答确实晚了,但是如果您需要书尾和功能查找,我添加了 NextOrLast、PreviousOrNext 的扩展方法,以便您可以使用 LINQ。
标签: c# linq ienumerable