System.Linq.ILookUp definicja brzmiCzy ILookup <TKey, TElement> nie powinien być (zadeklarowany) kowariantem w TElement?
interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>, IEnumerable {
int Count {
get;
}
IEnumerable<TElement> this[TKey key] {
get;
}
bool Contains(TKey key);
}
Od IEnumerable jest kowariantna w IGrouping < TKey, TElement >, IGrouping < TKey, TElement > jest kowariantna w TElement a interfejs tylko naraża TElement jako typ zwracany, Zakładam, że ILookup jest również kowariancyjny w TElement. Rzeczywiście, kompilacja bez problemów jest zdefiniowana.
Co może być przyczyną braku słowa kluczowego poza w pierwotnej definicji? Czy można dodać przyszłe wersje Linq?
... nikt nie myślał o, projektował, wdrażał, testował, wypuszczał ... a może z zupełnie innego powodu. –
Cóż, właśnie się zastanawiałem, czy to już cała historia. Z drugiej strony, jestem ciekawy, czy takie przypadki są a) wspólne b) prawdopodobnie będzie _fixed_ w przyszłości – bigge
LINQ został wprowadzony w .NET Framework 3.5 (C# 3.0), natomiast wariancja dla ogólnych parametrów typu w interfejsach od C# 4.0 . Czy to może być powód? –