【问题标题】:What are Generic Collections in C#? [duplicate]C# 中的泛型集合是什么? [复制]
【发布时间】:2014-11-18 21:03:25
【问题描述】:

我正在尝试构建我的第一个通用列表,但遇到了一些问题。我知道声明看起来像“List<T>”,我的页面顶部有using System.Collections.Generic;。但是,Visual Studio 无法识别 T 变量。

我错过了什么?

【问题讨论】:

  • 别难过,当我开始学习 .NET 2.0 时,我也经历了完全相同的事情。我一直在想,“T 到底是什么意思,为什么 Visual Studio 不知道我要做什么?”
  • 所以如果我想在我的列表中有不同类型的对象,我需要使用一个接口,即List,例如存储catObj和dogObj?
  • MSDN 上的[这篇文章][1] 应该对您有很大帮助。 [1]:msdn.microsoft.com/en-us/library/512aeb7t.aspx
  • 是的,List 将是如何利用泛型的一个很好的例子。

标签: c# .net generics


【解决方案1】:

List<T> 表示List<WhateverTypeYouWantItToBeAListOf>。比如:

如果我有一个员工类,并且我想要一个员工集合,我可以说:

List<Employee> employeeList = new List<Employee>();

然后我可以将 Employee 对象添加到该列表中,并使其成为类型安全的并扩展到我放入其中的任何员工对象。

像这样:

Employee emp1 = new Employee();
Employee emp2 = new Employee();

employeeList.Add(emp1);
employeeList.Add(emp2);

employeeList 现在将emp1emp2 保存为对象。

泛型集合有几个方面,最重要的是它们提供了一种独立于对象的方式来拥有一个……嗯……对象集合。它们是类型安全的;这意味着任何集合都将包含一种类型的对象。在List&lt;Employee&gt; 中不会有Animal 实例(当然,除非 Employee 是 Animal 继承自的基类。但是,在这一点上,您会遇到更大的问题。

使用泛型编程是它自己的主题,值得(至少)在一本书中写一章。在非常高的层次上,使用泛型编程提供了另一种重用代码的方法——独立于任何类层次结构或特定类的实现细节。

更多信息here

【讨论】:

  • &lt;&gt; 叫什么名字?它的用例是什么?关于 C# 语言,我应该了解他们什么?
【解决方案2】:

您需要将T 替换为另一种类型,例如intstring 或您创建的类:

List<int> values = new List<int>();

values.Add(1);
values.Add(2);

int secondNumber = values[1]; // Yay! No casting or boxing required!

【讨论】:

    【解决方案3】:

    例如,如果您想要一个通用的整数列表 (int),您可以这样写:

    List<int> list = new List<int>();
    

    T 是一个类型参数,在您的代码中应该是一个实际类型。

    【讨论】:

      【解决方案4】:

      “通用列表”之所以通用,是因为您可以使用同一个类来创建苹果列表和土豆列表。当然,一旦您使用 new 运算符创建了一个列表,您就必须决定您希望它存储哪些对象,并通过将您存储的对象的类型名称放在 &lt;&gt; 中来传达您的决定。

      下面这行实际上告诉了编译器:

      List<Employee> employeeList = new List<Employee>();
      

      “嘿,我需要一个可以处理Employee 类型对象的列表;并且命名为employeeList!”

      您以这种方式获得的列表对象不再是通用的。它只接受和返回Employee 类型的对象。但是列表的行为是以“通用”方式定义的,并不关心它实际使用的是什么对象。它只是在内部调用它们'T',因为对于列表应该做的所有事情,它的内容类型并不重要。

      【讨论】:

        【解决方案5】:

        T 视为变量名。您必须指定其值,即。使通用类“特定”。因此,您可以创建 List&lt;string&gt;List&lt;int&gt;List 任何其他您想要的东西。

        【讨论】:

          【解决方案6】:

          您声明一个 Foo 对象列表,如下所示:

          List<Foo> fooList;
          

          类型名称中的 是您在实例化时放入通用列表的“真实”类型对象的占位符。

          【讨论】:

            【解决方案7】:

            当您执行List&lt;Object&gt; 时,请确保您的 Object 类是公开的。在默认的 VS 安装中,类作为“内部”开箱即用 - 这意味着您无法列出它们,因为它们比您声明的公共列表更难访问。

            这让我……昨天。愚蠢的默认设置。

            【讨论】:

              【解决方案8】:

              您是尝试使用 List 类还是尝试构建自己的类?你的代码现在是什么样子的?

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-05-05
                • 1970-01-01
                • 1970-01-01
                • 2010-10-03
                • 2021-12-04
                • 2013-05-01
                • 1970-01-01
                相关资源
                最近更新 更多