首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >派生类的泛型KeyedCollection

派生类的泛型KeyedCollection
EN

Stack Overflow用户
提问于 2014-02-26 08:54:17
回答 1查看 249关注 0票数 2

我环顾四周,并没有发现任何与我的问题完全相符的东西,尽管this确实很接近。基本上,我有一个页面对象的KeyedCollection作为基础,并且我希望派生对象的强类型集合来自它。具体来说,我有:

public class Page public class Category : Page public class PageList<T> : KeyedCollection<string, T> where T : Page public class CategoryList : PageList<Category>

现在,这似乎没什么问题,直到我想要从PageList<T>内部调用一个方法,使用类似于DoSomethingTo(this)的东西,该方法目前被声明为DoSomethingTo(PageList<Page> pageList)。这给了我一个铸造错误。

我想要做的是,正如您可能已经知道的那样,在DoSomething(this)类或CategoryList类中使用CategoryList。

我该如何制作这个work...or呢?我尝试了类似的方法,我在上面链接的问题中建议,但我什么也找不到工作。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-02-26 09:38:53

您的问题是PageList<Page>PageList<Category>并不是协变的。这些实际上是完全无关的类型。即使T是派生类型,结果的泛型集合也不是。

如果您想一想,这是正确的,因为否则没有什么可以阻止您将CatagoryList传递给一个期望PageList的函数,该函数可以将一个Page添加到无效的可怕集合中。

为了帮助解决这种情况,C# 4增加了对协变量接口的支持。这些允许有限的协方差通过使用输入和输出关键字来限制您可以做的事情。

您的链接问题使用这个,您也可以这样做。

代码语言:javascript
复制
interface IPageList<out T> where T : Page
{
}

public class PageList<T> : KeyedCollection<string, T>, IPageList<T> where T : Page
{
}


DoSomethingTo(IPageList<Page> pageList)
{   
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22036210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档