定义 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 的未来版本吗?