Agak terlambat dalam permainan, saya tahu ... tapi inilah yang baru-baru ini saya lakukan. Ini sedikit berbeda dari milik Anda, tetapi memungkinkan pemrogram untuk menentukan apa yang harus operasi kesetaraan (predikat). Yang saya temukan sangat berguna ketika berhadapan dengan berbagai jenis, karena saya kemudian memiliki cara umum untuk melakukannya terlepas dari jenis objek dan<T>
dibangun di operator kesetaraan.
Ini juga memiliki jejak memori yang sangat sangat kecil, dan sangat, sangat cepat / efisien ... jika Anda peduli tentang itu.
Lebih buruk lagi, Anda hanya akan menambahkan ini ke daftar ekstensi Anda.
Ngomong-ngomong ... ini dia.
public static int IndexOf<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
int retval = -1;
var enumerator = source.GetEnumerator();
while (enumerator.MoveNext())
{
retval += 1;
if (predicate(enumerator.Current))
{
IDisposable disposable = enumerator as System.IDisposable;
if (disposable != null) disposable.Dispose();
return retval;
}
}
IDisposable disposable = enumerator as System.IDisposable;
if (disposable != null) disposable.Dispose();
return -1;
}
Semoga ini bisa membantu seseorang.
Max
pendekatan adalah bahwa: itu terus mencari, dan b: ia mengembalikan terakhir indeks ketika ada duplikat (orang biasanya memperkirakan indeks pertama)