使用LINQ在IEnumerable中获取上一个和下一个项目

14 浏览
0 Comments

使用LINQ在IEnumerable中获取上一个和下一个项目

我有一个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)来获取前一个或后一个项目。

  1. 这两种选项哪个更好?
  2. 是否有更好的选择?

“更好”包括性能(内存和速度)和可读性的综合考虑;可读性是我的主要关注点。

0