Я не думаю, что это особенно распространенная проблема, если честно - я почти уверен, что в рамках ничего нет.
Я подозреваю, что вам нужно решить, хотите ли вы, чтобы эффективность или простота реализовывали ваши собственные. Довольно простая версия метода расширения может выглядеть так:
public static int IndexOf<T>(this IEnumerable<T> source,
T first,
T second)
{
IEqualityComparer<T> comparer = EqualityComparer<T>.Default;
// We can only return when we've read source[index+1], so we need
// to keep one value behind
int index=-1;
T prev = default(T);
foreach (T element in source)
{
if (comparer.Equals(first, prev) &&
comparer.Equals(second, element) &&
index >= 0) // Avoid edge cases where first=default(T)
{
return index;
}
index++;
prev = element;
}
return -1;
}