You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中List<类名> 对象名 = new List<类名>()的含义及用法

List<Student> s1 = new List<Student>(); 语句含义

你对泛型List“必须先指定存储的数据类型才能添加元素”的理解完全正确。泛型的核心是类型参数化,List<T>里的T是类型占位符,既可以传int、string这类内置类型,也可以传自定义类——自定义类和内置类型在C#类型系统中没有本质区别。
这行代码可以拆成两部分理解:

  • 左侧List<Student> s1:声明一个名为s1的列表变量,约束这个列表只能存储Student类型的实例
  • 右侧new List<Student>():在内存中创建一个空的、专门用于存储Student对象的列表实例,赋值给s1变量

把自定义类作为泛型参数传入的实际作用是:

  • 让编译器做类型检查:如果你往这个列表里塞非Student类型的对象,编译阶段就会报错,不用等到运行时才暴露问题
  • 省去类型转换的麻烦:从列表里取出元素时,直接就是Student类型,不需要手动做强制转换
该List实例的正确使用方式

你当前示例里的Student类的name和id是默认私有字段,类外无法访问,建议先改成公共自动属性,方便后续读写:

class Student
{
    public string Name { get; set; }
    public int Id { get; set; }
}

常用操作示例如下:

static void Main(string[] args)
{
    // 实例化存Student的列表
    List<Student> s1 = new List<Student>();
    
    // 1. 添加元素:只能传入Student类型的实例
    s1.Add(new Student { Name = "张三", Id = 1 });
    s1.Add(new Student { Name = "李四", Id = 2 });
    // 批量添加
    s1.AddRange(new []{
        new Student{Name = "王五", Id = 3},
        new Student{Name = "赵六", Id =4}
    });

    // 2. 遍历读取元素:直接拿到Student类型的对象,不需要强转
    foreach (Student stu in s1)
    {
        Console.WriteLine($"学号:{stu.Id},姓名:{stu.Name}");
    }

    // 3. 其他常用操作
    // 按条件查询元素
    Student findStu = s1.FirstOrDefault(s => s.Id == 2);
    // 删除元素
    s1.Remove(findStu);
    // 获取列表元素总数
    int studentCount = s1.Count;

    Console.ReadKey();
}

注意:你原代码里直接写Console.WriteLine(s1)只会输出列表的类型全名,不会自动打印列表内的学生数据,必须遍历每个Student对象才能读取具体属性值。

内容的提问来源于stack exchange,提问作者Syed Harris Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:42:23