Определение System.Linq.ILookUp читает
interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>, IEnumerable {
int Count {
get;
}
IEnumerable<TElement> this[TKey key] {
get;
}
bool Contains(TKey key);
}
Поскольку IEnumerable является ковариантным в IGrouping < TKey, TElement > , IGrouping < TKey, TElement > является ковариантным в TElement, и интерфейс только предоставляет TElement в качестве возвращаемого типа, я бы предположил, что ILookup также ковариантен в TElement. Действительно, определение
interface IMyLookup<TKey, out TElement> : IEnumerable<IGrouping<TKey, TElement>>, IEnumerable {
int Count {
get;
}
IEnumerable<TElement> this[TKey key] {
get;
}
bool Contains(TKey key);
}
компилируется без проблем.
Итак, какова может быть причина, по которой ключевое слово out отсутствует в исходном определении? Можно ли добавить будущие версии Linq?