我在msdn上看到泛型类List,说是要取代arraylist,但是我看到它举例的首先你要实例化这个类,List,并且指定这个类是什么类型,比如
        List<string> dinosaurs = new List<string>();        dinosaurs.Add("Tyrannosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");
        dinosaurs.Add("Compsognathus");
但是这样的话就没有arraylist那样灵活,即使你实例化了arraylist,也可以加入其它的值类型等。那么List类集合只有容纳一系列类型必须完全一致的类,是吗?那功能上要大打折扣啊,又没有高手对此提出疑义啊?

解决方案 »

  1.   

    MSDN已经回答了你的问题,List的出生并不是用来取代ArrayList的
    -----------------------在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。 确保用于类型 T 的值类型实现 IEquatable 泛型接口。如果未实现,则诸如 Contains 这样的方法必须调用 Object.Equals(Object) 方法,后者对受影响的列表元素进行装箱。如果值类型实现 IComparable 接口,并且您拥有源代码,则还应实现 IComparable 泛型接口以防止 BinarySearch 和 Sort 方法对列表元素进行装箱。如果您不拥有源代码,则将一个 IComparer 对象传递给 BinarySearch 和 Sort 方法。使用 List 类的特定于类型的实现,而不是使用 ArrayList 类或自己编写强类型包装集合,这样是很有好处的。原因是您的实现必须做 .NET Framework 已经为您完成的工作,并且公共语言运行库能够共享 Microsoft 中间语言代码和元素据,这是您的实现所无法做到的。
      

  2.   

    大哥,我就是这段话看不大明白啊。那用List的时候只能加入同一种类型的数据是吗?
      

  3.   

    已经说得很清楚了,在值类型的场合用List不必box, 效率会更高。而且这样来使用List本来就是强类型的场合,不会加入其他类型。如果指定了类型T,其他类型是加不进去的,你试试就知道,别用string,string会自动转换。
      

  4.   

    那就是说List不能既加入string,又加入int,那和arraylist的功能相差还是挺远的了
      

  5.   

    那就是说List不能既加入string,又加入int,那和arraylist的功能相差还是挺远的了
    -------------
    这样不是可以起到一个数据类型的约束,避免了不正确插入数据,而且它是在编程时检查的,不至于等到运行时才抛出数据类型错误的异常,
    除去效率问题,楼主的问题其实就跟问:我们既然已经有了public了,为什么还要internal、protected、privte干什么?
      

  6.   

    泛型就是需要在编译时才能确认占位符的类型,所以跟arraylist相比,只能受益小众,但效率要比arraylist高出很多。我的理解正确吗?因为微软还没有抛弃arraylist,它还是有需要的地方的
      

  7.   

    开发较简单的中小型软件,效率在高CPU及大容量内存的前提下,泛型编程就只能是多此一举了...而且在逻辑关系并不复杂的前提下,没必要用泛类.是这样吧?
      

  8.   

    实际应用中,List的用途比ArrayList广泛得多.就像你经常用string而不用object一样.明白吗?