Certo, è abbastanza facile:
var index = list.Select((value, index) => new { value, index = index + 1 })
.Where(pair => SomeCondition(pair.value))
.Select(pair => pair.index)
.FirstOrDefault() - 1;
Questo restituirà l'indice se trova qualcosa che corrisponde, o -1 altrimenti. Il +1 e -1 è quello di ottenere il comportamento per il caso in cui non ci sono corrispondenze. Se si sapeva che ci sarebbe sempre una partita, sarebbe più semplice:
var index = list.Select((value, index) => new { value, index })
.Where(pair => SomeCondition(pair.value))
.Select(pair => pair.index)
.FirstOrDefault();
Se sei felice di ottenere il resto della lista da quel punto in poi, è sicuramente SkipWhile
tuo amico, come detto da Chris . Se desidera che il resto della lista e l'indice originale, che è troppo facile:
var query = list.Select((value, index) => new { value, index })
.SkipWhile(pair => !SomeCondition(pair.value))
Che vi darà una sequenza di coppie { value, index }
dal primo valore corrispondente SomeCondition
.
fonte
2010-11-02 06:21:50
+1 per aver detto che probabilmente vuole usare 'SkipWhile', perché trovare l'indice e poi chiamare' Skip' enumera la query due volte – Gabe
Così vicino ... ora voglio usare SkipWhile in congiunzione con un contatore, cioè lista. SkipWhile (myBusinessLogicCondition && list.Count - SkipIndex> someXnumber); – user494352
user494352: Sembra che tu voglia dare un'occhiata alla lista di Jon.Seleziona(). SkipWhile() 'rispondi alla fine del suo post. – Gabe