私はこう書きました:
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();
}
}
しかし、それがすでに存在しているかどうかはわかりません。
ベストアンサー1
私はその賢明さに疑問を抱きますが、おそらく:
source.TakeWhile(x => x != value).Count();
(必要な場合はEqualityComparer<T>.Default
エミュレートするために使用!=
) - ただし、見つからない場合は -1 を返すように注意する必要があります... そのため、長い方法で実行することをお勧めします
public static int IndexOf<T>(this IEnumerable<T> source, T value)
{
int index = 0;
var comparer = EqualityComparer<T>.Default; // or pass in as a parameter
foreach (T item in source)
{
if (comparer.Equals(item, value)) return index;
index++;
}
return -1;
}