none
IList<T> 类型转换的问题 RRS feed

  • 问题

  • 目前有一个Collection类继承了IList<T>接口;一个CustomClass 继承一个ICustomInterface接口,代码如下:
        public class CustomCollection<T> : IList<T>
        {
              //Interface Code
        }
        public interface ICustomInterface
        {
    
        }
        public class CustomClass : ICustomInterface
        {
    
        }
    

    我想实现从CustomCollection<Custom> 到 IList<ICustomInterface> 类型转换的功能,如下

     

    CustomCollection<Custom> customCollection = new CustomCollection<Custom>();
     IList<ICustomInterface> customList = customCollection as IList<ICustomInterface>;
    
      但是无法进行类型转换,返回null ,请问如何实现这样的类型转换?(目前通过重新循环填充一次新IList的方式,但效率较低,能否实现直接的、效率更高的类型转换?)谢谢先:)

     

    • 已编辑 leoleee 2010年4月9日 17:10 增加说明
    2010年4月9日 17:07

答案

全部回复

  • 你这个问题是 ilist接口只是现实了声明一些抽象方法 没有继承显示具体类型 你转换ilist接口丢失了具体方法现实  

    2010年4月9日 18:01
    版主
  • 我觉得应该是和泛型有关系吧?如果是 CustomCollection as IList 和CustomClass as ICustomInterface 这样的转换都没有问题。但是CustomCollection<Custom>  as IList<ICustomInterface>这样就不行了。上面例子中我只是没有把ilist接口具体方法现实的代码拷上来,用//Interface Code省略了。
    2010年4月10日 4:13
  • 我觉得应该是和泛型有关系吧?如果是 CustomCollection as IList 和CustomClass as ICustomInterface 这样的转换都没有问题。但是CustomCollection<Custom>  as IList<ICustomInterface>这样就不行了。上面例子中我只是没有把ilist接口具体方法现实的代码拷上来,用//Interface Code省略了。

    我从来没见过接口能现实具体  也许你理解错了
    2010年4月10日 6:39
    版主
  • 我找到我问题的答案了,主要是涉及NET 4.0中的泛型协变和反变。结贴吧。
    2010年4月13日 17:39
  • 你好,如果你觉得哪个回答比较满意,你也可以自己结贴的!


    邹俊才
    2010年4月14日 6:41
    版主