在这里插入图片描述

通过上一篇文章,我们掌握了 C# 变量、运算符、字符串、控制流 核心基础,已经可以编写简单的判断、循环、数据计算程序。

但此时我们的代码存在一个致命短板:只能用单个变量存储单个数据

如果需要存储全班50个学生成绩、100条用户信息、批量商品数据,挨个定义变量会极度冗余、完全不具备实用性。

真实项目开发中,90%的数据都是批量、结构化数据。今天我们就来攻克 C# 零基础核心重难点:数组与集合

学完本文,你将彻底告别单一变量的局限,掌握 C# 最核心的批量数据存储方案,适配绝大多数基础业务场景,为后续面向对象、项目实战筑牢核心地基。

一、为什么需要数组和集合?

我们先理清核心逻辑:

变量:适合存储零散、少量的单一数据(单个姓名、单个分数)

数组/集合:适合存储一组同类型的批量数据(批量成绩、批量用户名、批量编号)

简单来说:单个数据用变量,一堆数据用数组/集合

二者是 C# 中批量数据存储的两大核心方案,其中数组是基础,集合是项目实战主力。

二、数组:固定容量的批量数据容器

数组是 C# 最基础的批量数据结构,是固定长度、同类型、连续存储的数据容器。一旦定义,长度无法修改,适合存储数据量固定不变的场景。

1. 一维数组(新手最常用)

一维数组用于存储单列批量数据,比如一组分数、一组序号,提供三种常用定义方式,适配不同初始化场景。

using System;

class Program
{
    static void Main()
    {
        // 方式1:先定义长度,后续赋值
        int[] scores = new int[3];
        scores[0] = 90;
        scores[1] = 85;
        scores[2] = 95;

        // 方式2:直接初始化赋值(自动识别长度)
        string[] names = { "张三", "李四", "王五" };

        // 方式3:规范完整写法
        double[] prices = new double[] { 9.9, 19.9, 29.9 };
    }
}

2. 数组核心特性(必记)

  • 下标从0开始:数组第一个元素下标为0,依次递增,最大下标 = 长度-1

  • 类型统一:一个数组只能存储单一类型数据,int数组只能存整数,string数组只能存字符串

  • 长度固定:初始化后无法扩容、缩容,超出长度赋值会直接报错

  • 获取长度:通过 数组名.Length 获取数组总元素个数

3. 数组遍历实战(for/foreach)

存储数据后,最常用的操作就是遍历读取所有元素,两种遍历方式适配不同场景:

using System;

class Program
{
    static void Main()
    {
        int[] scores = { 88, 92, 79, 95 };

        // 方式1:for循环遍历(可修改元素值)
        Console.WriteLine("for循环遍历结果:");
        for (int i = 0; i < scores.Length; i++)
        {
            Console.WriteLine($"第{i+1}个成绩:{scores[i]}");
        }

        // 方式2:foreach遍历(只读遍历,代码更简洁)
        Console.WriteLine("\nforeach循环遍历结果:");
        foreach (int score in scores)
        {
            Console.WriteLine(score);
        }
    }
}

4. 二维数组(表格型数据)

二维数组适合存储表格、矩阵类数据,比如多科成绩、班级学生数据,日常基础开发使用频率较低,了解即可。

using System;

class Program
{
    static void Main()
    {
        // 2行3列二维数组
        int[,] data = { { 1, 2, 3 }, { 4, 5, 6 } };
        
        // 读取指定位置元素
        Console.WriteLine(data[0, 1]); // 输出2
    }
}

5. 数组核心优缺点

优点:结构简单、查询速度快、内存占用低,适合固定数据量场景

缺点:长度固定不灵活,无法动态增删数据,适配场景有限,真实项目中极少单独使用

三、集合:项目实战的动态数据容器

数组最大的痛点是长度固定,但项目中绝大多数数据都是动态变化的(用户新增、订单增加、列表删除)。

因此,集合才是C#项目开发的绝对主力。集合基于数组封装,解决了数组无法动态扩容的问题,提供了大量便捷的增删改查方法,开发效率大幅提升。

新手只需吃透两个核心集合:List列表Dictionary字典,覆盖95%的基础批量数据场景。

1. List 动态列表(最常用)

List是动态长度列表,可以随意新增、删除、修改数据,无需手动管理长度,完全替代数组用于常规批量数据存储。

使用前需引入命名空间:using System.Collections.Generic;

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 定义int类型动态列表
        List<int> scoreList = new List<int>();

        // 1. 添加元素
        scoreList.Add(85);
        scoreList.Add(90);
        scoreList.Add(78);

        // 2. 批量添加元素
        scoreList.AddRange(new int[] { 92, 88 });

        // 3. 删除指定元素
        scoreList.Remove(78);

        // 4. 通过下标删除
        scoreList.RemoveAt(0);

        // 5. 获取列表长度
        Console.WriteLine($"当前列表元素个数:{scoreList.Count}");

        // 6. 遍历列表
        foreach (int score in scoreList)
        {
            Console.WriteLine(score);
        }
    }
}

核心区别:数组用 Length 获取长度,List用 Count 获取元素个数。

2. Dictionary<TKey,TValue> 字典集合

普通数组、List都是下标索引取值,适合有序数据;如果需要键值对映射数据(通过关键词找对应值),就需要字典。

适用场景:存储账号密码、学生姓名-成绩、状态码-状态描述等一一对应的数据。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 定义键为string、值为int的字典
        Dictionary<string, int> userScore = new Dictionary<string, int>();

        // 1. 添加键值对
        userScore.Add("张三", 95);
        userScore.Add("李四", 88);
        userScore.Add("王五", 92);

        // 2. 通过键取值
        Console.WriteLine($"张三的成绩:{userScore["张三"]}");

        // 3. 判断键是否存在
        if (userScore.ContainsKey("李四"))
        {
            Console.WriteLine("李四数据存在");
        }

        // 4. 删除指定键数据
        userScore.Remove("王五");

        // 5. 遍历字典(同时获取键和值)
        foreach (var item in userScore)
        {
            Console.WriteLine($"姓名:{item.Key},成绩:{item.Value}");
        }
    }
}

四、数组 vs 集合:新手精准选型规则

很多新手学完两者后不知道该用谁,记住这套万能选型标准即可:

  • 优先用List集合:99%的动态批量数据场景(数据会增、删、改,长度不固定)

  • 用数组:数据固定不变、无需修改、追求极致性能的静态数据(固定配置、常量列表)

  • 用Dictionary字典:需要键值对映射查询,通过关键词快速匹配数据的场景

五、新手高频易错坑点(必避坑)

  • 数组下标越界:最大下标为 长度-1,超出范围直接程序报错,遍历务必以 Length 为边界

  • 集合命名空间遗漏:使用List、Dictionary必须引入System.Collections.Generic,否则代码报错

  • 长度属性混淆:数组是 Length,集合是 Count,切勿混用

  • 字典键唯一:字典中Key不允许重复,重复添加相同键会直接报错

  • foreach不可修改元素:foreach仅用于只读遍历,需要修改数据必须用for循环

六、全文核心总结

  1. 变量存单个数据,数组/集合存批量数据,是程序存储体系的核心分工;

  2. 数组固定长度、性能高、灵活性差,仅适合静态固定数据场景;

  3. List动态可变、方法丰富,是日常开发批量有序数据的首选;

  4. Dictionary键值对映射,专属匹配查询场景,高效便捷;

  5. 数组是基础原理,集合是实战工具,学习重心以集合为主

至此,你已经掌握了 C# 完整的数据存储体系(变量+字符串+数组+集合),搭配上一篇的控制流语法,已经具备编写完整小型业务程序的能力。

下期预告

下一篇我们将正式迈入面向对象编程核心,精讲 C# 类与对象,彻底从「写代码」进阶到「写项目」,解锁C#开发的真正核心能力!

更多推荐