c# - 更好地理解 C# 泛型

标签 c# generics

我查看了一些使用 C# 泛型的示例代码。为什么以及何时应该使用它们?

所有的例子都很复杂。我需要一个简单明了的示例来帮助我开始使用 C# 泛型。

最佳答案

一个非常简单的例子是通用的 List<T>类(class)。它可以容纳许多任何类型的对象。例如,您可以声明一个字符串列表 (new List<string>()) 或一个动物列表 (new List<Animal>()),因为它是通用的。

如果不能使用泛型怎么办?你可以使用 ArrayList类,但缺点是它包含的类型是 object .因此,当您遍历列表时,您必须将每个项目转换为正确的类型(stringAnimal),这需要更多代码并且会降低性能。另外,由于 ArrayList持有对象,它不是类型安全的。您仍然可以添加 AnimalArrayList字符串:

ArrayList arrayList = new ArrayList();
arrayList.Add(new Animal());
arrayList.Add("");

因此,在迭代 ArrayList 时,您必须检查类型以确保实例属于特定类型,这会导致代码不佳:

foreach (object o in arrayList)
{
  if(o is Animal)
    ((Animal)o).Speak();
}

使用通用的 List<string> ,这根本不可能:

List<string> stringList = new List<String>();
stringList.Add("Hello");
stringList.Add("Second String");
stringList.Add(new Animal()); // error! Animal cannot be cast to a string

关于c# - 更好地理解 C# 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606595/

相关文章:

objective-c - Objective-C 是否支持泛型?

java - 如何存储 Java 类型,只允许某些特定类型?

c# - 在 ASP .NET MVC 应用程序中创建用户角色时出现错误

c# - WCF NetTcpBinding 缓冲与流式性能问题

java - 从嵌套泛型推断泛型类型参数

ios - 苹果 swift : Type Casting Generics

c# - 避免泛型函数中的超出范围问题

c# - 具有部分 View 的 ASP.NET MVC 1.0 嵌套模型

c# - 将参数传递给 ViewModel 中的 linq 查询的正确方法

C# 按分数对行进行排序