Comment faire pour obtenir l'index d'un élément dans un IEnumerable?

J'ai écrit ceci:

public static class EnumerableExtensions
{
    public static int IndexOf<T>(this IEnumerable<T> obj, T value)
    {
        return obj
            .Select((a, i) => (a.Equals(value)) ? i : -1)
            .Max();
    }

    public static int IndexOf<T>(this IEnumerable<T> obj, T value
           , IEqualityComparer<T> comparer)
    {
        return obj
            .Select((a, i) => (comparer.Equals(a, value)) ? i : -1)
            .Max();
    }
}

Mais je ne sais pas si elle existe déjà, n'est ce pas?

  • Le problème avec un Max approche est que: il ne cesse de regarder, et b: elle retourne la dernière index quand il y a des doublons (les gens s'attendent généralement à ce que le premier indice)
  • geekswithblogs.net compare 4 solutions et de leur performance. Le ToList()/FindIndex() astuce fonctionne mieux
InformationsquelleAutor Jader Dias | 2009-08-17