优秀的编程知识分享平台

网站首页 > 技术文章 正文

C#中的List可以存储哪些类型的数据?

nanyue 2025-01-13 16:35:31 技术文章 2 ℃

在 C# 中,List<T> 是一个强类型的泛型集合,可以存储任意类型的数据,但存储的类型必须在创建列表时指定(即通过类型参数 <T> 定义)。

可以存储的类型

  1. 值类型(Value Types)
  2. 例如:int、float、bool、char、struct 等。
  3. List<int>、List<double>、List<struct> 等都是合法的。
  4. 存储值类型时,数据直接保存在列表中。
  5. 示例:
  6. List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
  7. 引用类型(Reference Types)
  8. 例如:string、class、object 等。
  9. List<string>、List<object>、List<MyClass> 等也是合法的。
  10. 存储引用类型时,列表存储的是引用,而不是对象本身。
  11. 示例:
  12. List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
  13. Nullable 类型
  14. 通过 Nullable<T>(或 T? 简写)可以在 List 中存储可为 null 的值类型。
  15. 例如:List<int?> 可存储整数和 null 值。
  16. 示例:
  17. List<int?> nullableNumbers = new List<int?> { 1, null, 3, 4, null };
  18. 自定义类型
  19. 例如:自定义的类或结构体。
  20. 在定义了一个类或结构体后,可以创建一个存储该类型的 List。
  21. 示例:
  22. public class Person { public string Name { get; set; } public int Age { get; set; } } List<Person> people = new List<Person> { new Person { Name = "Alice", Age = 25 }, new Person { Name = "Bob", Age = 30 } };
  23. 接口类型
  24. 可以创建一个 List 存储实现某个接口的对象。
  25. 示例:
  26. public interface IShape { double GetArea(); } public class Circle : IShape { public double Radius { get; set; } public double GetArea() => Math.PI * Radius * Radius; } List<IShape> shapes = new List<IShape> { new Circle { Radius = 5 } };
  27. 任意类型(使用 object 类型)
  28. 使用 List<object> 可以存储任意类型的对象,但可能需要类型转换。
  29. 不推荐在类型明确的场景中使用,因为它失去了泛型的强类型约束。
  30. 示例:
  31. List<object> mixedList = new List<object> { 1, "string", 3.14, true };

类型约束

由于 List<T> 是强类型集合:

  1. 只能存储与类型参数 T 一致的数据类型
  2. 在编译时,类型不匹配会导致编译错误。

示例(错误用法):

List<int> numbers = new List<int> { 1, 2, "string" }; // 错误:无法将 string 添加到 List<int>

总结

  • List<T> 可以存储任意值类型和引用类型的数据,包括内置类型、自定义类型和接口类型。
  • 使用泛型的强类型约束可以提高类型安全性和性能。
  • 如果需要存储多种类型,可以使用 object 或创建一个基类/接口类型的 List 来实现。

Tags:

最近发表
标签列表