小编big*_*gge的帖子

不应该ILookup <TKey,TElement>在TElement中被(声明)协变吗?

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);
}
Run Code Online (Sandbox Code Playgroud)

由于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);
}
Run Code Online (Sandbox Code Playgroud)

编译没有问题.

那么,原始定义中缺少out关键字的原因可能是什么?可能会添加Linq的未来版本吗?

.net c# linq generics covariance

18
推荐指数
1
解决办法
534
查看次数

标签 统计

.net ×1

c# ×1

covariance ×1

generics ×1

linq ×1