当前位置:  开发笔记 > 编程语言 > 正文

将泛型集合转换为基类型

如何解决《将泛型集合转换为基类型》经验,为你挑选了2个好方法。

我有一个IList我想投的东西ICollection但是当我尝试一个明确的演员时,我得到了null.是否可以在不创建和填充新集合的情况下执行此操作?

编辑: 由于我只想从集合中读取,我转而使用泛型方法:

public void PopulateList(ICollection collection)

然后我可以通过它IList.有没有一种很好的方法来缓存此列表,以便我可以在需要时刷新它.我的第一个倾向是使用:

Object cachedCollection;
Type cachedType;
public void PopulateList(ICollection collection) {
    cachedCollection = collection;
    cachedType = T;

    // other stuff...
}

private void Refresh() {
    PopulateList(cachedCollection as ICollection);
}

有没有人有更好的方法这样做?



1> Doug..:

最简洁的答案是不." 您需要使用新的BaseClass类型创建一个新集合并填充它.

如果你考虑一下,这是有道理的.如果您可以简单地将您的集合"强制转换"为BaseClass,那么您可以将类型为"BaseClass"的东西粘贴到其中,从而将简单的BaseClass对象强制转换为DerivedClass集合.这将破坏创建类型安全集合的目的.

在极端情况下,如果您有两个派生类Foo和Bar,则可以通过将集合类型转换回BaseClass集合来强制Bar对象进入Foo对象的集合.



2> Jim Petkus..:

这被称为协方差,虽然目前在.net中不支持泛型,但它将被添加到4.0框架中(以及相反的方向,即反向差异).

来自PDC 2008的精彩视频是由Anders Hejlsberg提供的关于C#期货的会议:

http://channel9.msdn.com/pdc2008/TL16/

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有