ArticleInfo[] s1 = new NewspaperArticleInfo[2];            IList<ArticleInfo> s2 = new List<NewspaperArticleInfo>();
NewspaperArticleInfo是ArticleInfo的派生类,不管ArticleInfo是接口还是类;第二行代码都无法编译通过,编辑器说不能隐式转换,我就郁闷了还好第一行代码可以通过;求达人指点。。

解决方案 »

  1.   

    在List中的初始化就是这样,泛型必须一致,如果真想那样可以重写List类        public void tets()
            {
                List<NewspaperArticleInfo> x = new List<NewspaperArticleInfo>();
                MyList u = new MyList(x);        }
            public class ArticleInfo
            {
            }
            public class NewspaperArticleInfo : ArticleInfo
            { }
            class MyList : List<ArticleInfo >
            {
                public MyList(List<NewspaperArticleInfo> inp)
                {
                    //进行转换
                }
     
            }
      

  2.   

       1. /// <summary>  
       2. /// 数据转换类  
       3. /// </summary>  
       4. public static class DataTransformHelper  
       5. {  
       6.     #region 转换IList<T>为List<T>  
       7.     /// <summary>  
       8.     /// 转换IList<T>为List<T>  
       9.     /// </summary>  
      10.     /// <typeparam name="T">指定的集合中泛型的类型</typeparam>  
      11.     /// <param name="gbList">需要转换的IList</param>  
      12.     /// <returns></returns>  
      13.     public static List<T> ConvertIListToList<T>(IList gbList) where T : class 
      14.     {  
      15.         List<T> list = new List<T>();  
      16.         if (gbList != null && gbList.Count > 0)  
      17.         {  
      18.             for (int i = 0; i < gbList.Count; i++)  
      19.             {  
      20.                 T temp = gbList[i] as T;  
      21.                 if (temp != null)  
      22.                     list.Add(temp);  
      23.             }                  
      24.         }  
      25.         return list;  
      26.     }  
      27.     #endregion 转换IList<T>为List<T>  
      28. } 
      

  3.   

    可以的。他的问题是协变性的问题了。//数组支持协变性
    ArticleInfo[] s1 = new NewspaperArticleInfo[2];
    //泛型在C#4.0后才支持协变性
    IList<ArticleInfo> s2 = new List<NewspaperArticleInfo>();
      

  4.   

    泛型类不能直接强转的
    IList<ArticleInfo> s2 = new List<ArticleInfo>();然后你s2还是能添加NewspaperArticleInfo类型的对象的
      

  5.   

    也可以在重写的类中增加add方法
            class MyList : List<ArticleInfo >
            {
                public MyList(List<NewspaperArticleInfo> inp)
                {
                    //进行转换
                }
                public   void  Add(NewspaperArticleInfo  item)
                {            }
     
            }
      

  6.   

    list 内部不能间接隐式转换
      

  7.   

    楼上好多都提到了, IList<ArticleInfo> s2 = new List<NewspaperArticleInfo>();你这个转换有问题。
      

  8.   

    还有
    ArticleInfo[] s1 = new NewspaperArticleInfo[2];这样写的逻辑意义是什么??这和 ArticleInfo s1  =new NewspaperArticleInfo();
    区别很大这2种写法没区别
    ArticleInfo[] s1 = new NewspaperArticleInfo[2];
    ArticleInfo[] s1 = new ArticleInfo[2];
      

  9.   

    C#4.0也不可以,因为泛型接口IList<T>没有in关键字,无法协变
    如果是IEnumerable<T>则可以
      

  10.   


    IList是接口,泛型List<T>实现了该接口
      

  11.   

    这样就可以通过了。
    objec s2 = new List<NewspaperArticleInfo>();
    IList<ArticleInfo> s1=s2 as IList<ArticleInfo>;
      

  12.   

    其实 List<NewspaperArticleInfo>()是属于一种类型 List<ArticleInfo> 也是一种类型,
    虽然ArticleInfo和NewspaperArticleInfo 是父子关系,但是不代表List<NewspaperArticleInfo>()和List<ArticleInfo> 也是父子关系,不能直接隐身转换。要循环转换,或者用其他的办法一个一个的转换。
      

  13.   


    +1
    IList<ArticleInfo> s2 = new List<NewspaperArticleInfo>().ConvertAll( nai => nai as ai);
      

  14.   

    将List<NewspaperArticleInfo>转为List<ArticleInfo>,这样就成了IList<ArticleInfo>的子类
      

  15.   

    IList<ArticleInfo> s2 = new List<NewspaperArticleInfo>().ConvertAll<ArticleInfo>(new Converter<NewspaperArticleInfo, ArticleInfo>(delegate(NewspaperArticleInfo info) { return info as ArticleInfo;}));
    这样吧。需要把集合的元素ConvertAll,全部转换成相应的类型