Obtenir précédent et suivant dans un IEnumerable à l'aide de LINQ

J'ai un IEnumerable d'un type personnalisé. (Que j'ai obtenu à partir d'un SelectMany)

J'ai aussi un élément (myItem) dans ce IEnumerable que je désir, le précédent et le point suivant à partir de l'interface IEnumerable.

Actuellement, je suis en train de faire le désiré comme ceci:

var previousItem = myIEnumerable.Reverse().SkipWhile( 
    i => i.UniqueObjectID != myItem.UniqueObjectID).Skip(1).FirstOrDefault();

Je peux obtenir l'élément suivant simplement ommitting la .Reverse.

ou, j'ai pu:

int index = myIEnumerable.ToList().FindIndex( 
    i => i.UniqueObjectID == myItem.UniqueObjectID)

et ensuite utiliser .ElementAt(index +/- 1) pour obtenir le précédent ou suivant.

  1. Ce qui est mieux entre les deux options?
  2. Est-il une option encore meilleure disponible?

"Mieux" comprend une combinaison de la performance (mémoire et de la vitesse) et la lisibilité; à la lisibilité étant ma principale préoccupation.

  • Compte tenu de la lisibilité, de Votre première option est génial! Beaucoup mieux que dans les réponses. Va l'utiliser! Merci!
  • Je suis d'accord avec @Aleksei, à l'aide de celui-là aussi
InformationsquelleAutor Bob2Chiv | 2012-01-06