【问题标题】:why is this namespace added by default "System.Collections.Generic"?为什么默认添加此命名空间“System.Collections.Generic”?
【发布时间】:2010-11-28 07:32:01
【问题描述】:

只是一个一般的好奇心问题。为什么我们在创建项目时默认在 Visual Studio 中添加这个命名空间“System.Collections.Generic”而不是“System.Collections”?

泛型下的集合类是否比 System.Collections 中的集合类更受欢迎?

谢谢 哈沙

【问题讨论】:

    标签: c#


    【解决方案1】:

    .NET 2.0 添加了泛型集合,这将完全取代为 .NET 2.0 及更高版本构建的应用程序中非泛型集合的使用。

    它们有很多优点,特别是因为它们带来了强类型化并避免了值类型的装箱。

    至于为什么默认添加命名空间 - 我猜微软决定添加这个以鼓励使用它们而不是旧的 System.Collections 类。

    【讨论】:

      【解决方案2】:

      我怀疑如果 MS 发布带有泛型集合类的 .NET BCL,许多非泛型版本就不会包含在内。

      话虽如此,在微软的代码中ArrayList 的用法还是蛮多的。

      【讨论】:

      • 这些用法是用不支持泛型的 C# 1 编写的。那时,ArrayList 是唯一的选择。
      • 如果 CLR 最初发布时支持泛型,那么根本就不会有任何非泛型集合。
      • @SLaks -- 事实并非如此。使用 .NET Reflector 并搜索 ArrayList 的用法——您将看到它在 .NET 3.0(用于 WCF)中包含的 System.ServiceModel 命名空间中使用。在某些情况下ArrayList 的表现肯定优于List<object>
      • 你也可以在 WPF 中找到很多用法,在 .NET 3.0 中也有介绍。
      【解决方案3】:

      泛型集合更容易使用,默认情况下包含它们对我来说很有意义。

      【讨论】:

        【解决方案4】:

        是的,泛型集合比常规集合更好,因为它们带来了强类型,可以防止装箱和拆箱,以及所有那些烦人的强制转换。

        几乎没有理由使用常规集合。即使您不知道要存储哪种类型的对象,您仍然可以使用List<object> 之类的内容。

        【讨论】:

        • 如果给定一个非泛型集合,您仍然可以调用 collection.Cast() 来取回一个强类型枚举器。
        猜你喜欢
        • 2011-07-18
        • 2013-06-04
        • 1970-01-01
        • 2014-08-10
        • 2013-03-11
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多