公司动态

C# 核心知识点总结:泛型、字典、异常、IO流、进程与线程

📅 2026/8/3 1:59:22
C# 核心知识点总结:泛型、字典、异常、IO流、进程与线程
C# 核心知识点总结泛型、字典、异常、IO流、进程与线程在C#开发中泛型、字典、异常处理、IO流、进程和线程是日常开发高频使用、面试必考的核心基础知识点。这些知识点覆盖了数据存储、代码容错、文件操作、多任务处理四大核心场景。本文将系统梳理各知识点的核心原理、用法、优缺点及实战场景搭配可运行代码示例帮助大家彻底吃透基础夯实C#开发功底。一、C# 泛型Generic—— 类型复用的核心1. 核心概念泛型是C#提供的类型参数化技术允许我们定义类、方法、接口时不指定具体数据类型在调用时再传入实际类型。简单来说泛型就是“模板”一次定义多种类型复用。泛型的核心作用解决值类型装箱拆箱损耗、避免重复代码、保证类型安全。2. 核心优势类型安全编译时校验类型杜绝类型转换异常性能高效无需装箱、拆箱操作避免值类型性能损耗代码复用一套代码适配多种数据类型无需重载多个方法3. 常用泛型场景代码示例1泛型方法适用于通用工具方法适配任意数据类型// 泛型方法获取数组最大值适配所有数值类型 public static T GetMaxT(T[] arr) where T : IComparableT { T max arr[0]; foreach (var item in arr) { if (item.CompareTo(max) 0) max item; } return max; } // 调用 int intMax GetMax(new int[] { 1, 3, 5 }); double doubleMax GetMax(new double[] { 1.2, 3.4, 2.1 });2泛型约束通过where限制泛型类型范围避免非法类型传入常用约束值类型、引用类型、接口、无参数构造函数等。3泛型集合日常最常用的ListT、DictionaryTKey,TValue均为泛型集合替代非泛型的 ArrayList、Hashtable。4. 总结泛型是C#集合、框架通用方法的底层核心只要是通用、多类型适配的场景优先使用泛型杜绝重复代码和装箱损耗。二、Dictionary 字典——键值对高效存储容器1. 核心概念DictionaryTKey, TValue是C#专属的泛型键值对集合基于哈希表实现以「唯一键Key、对应值Value」的形式存储数据是查询效率最高的集合之一。2. 核心特性Key 唯一且不可重复Value 可重复、可空增、删、查时间复杂度O(1)效率远高于 List 遍历查询无序存储C#7.0 有序字典可使用 OrderedDictionary键值类型固定类型安全无装箱拆箱3. 常用操作代码示例// 1. 初始化字典 Dictionarystring, int scoreDict new Dictionarystring, int() { { 张三, 95 }, { 李四, 88 } }; // 2. 添加元素重复Key会报错 scoreDict.Add(王五, 92); // 3. 安全查询避免Key不存在报错 if (scoreDict.TryGetValue(张三, out int score)) { Console.WriteLine($张三的分数{score}); } // 4. 遍历字典 foreach (var item in scoreDict) { Console.WriteLine($姓名{item.Key}分数{item.Value}); } // 5. 删除元素 scoreDict.Remove(李四);4. 适用场景与对比适用场景根据唯一标识快速查询数据、映射关系存储ID-名称、账号-信息、数据去重对比ListList适合有序遍历、下标访问Dictionary适合按键快速查询三、C# 异常处理——程序容错的核心机制1. 核心概念异常是程序运行时出现的非预期错误数组越界、空引用、文件不存在、格式错误等C# 提供try-catch-finally-throw机制用于捕获异常、处理错误、保证程序不崩溃。2. 核心关键字try包裹可能出现异常的代码catch捕获指定类型异常编写容错逻辑finally无论是否报错都会执行用于释放资源throw主动抛出异常向上层传递错误信息3. 分层异常处理示例try { // 可能报错的代码 string str null; Console.WriteLine(str.Length); // 空引用异常 } catch (NullReferenceException ex) { // 精准捕获空引用异常 Console.WriteLine($空引用错误{ex.Message}); } catch (Exception ex) { // 捕获所有未知异常兜底 Console.WriteLine($程序异常{ex.Message}); } finally { // 必执行释放资源、关闭连接 Console.WriteLine(代码执行结束释放资源); }4. 开发规范禁止直接捕获所有异常catch(Exception)不做处理避免隐藏BUG优先精准捕获具体异常再用通用异常兜底IO操作、网络请求、类型转换必须加异常处理异常用于容错不用于控制业务逻辑四、C# IO流——文件与数据读写操作1. 核心概念IOInput/Output输入输出流是C# 用于内存与外部设备文件、网络、内存数据传输的核心机制。流是数据传输的通道所有文件读写、数据传输都基于流实现。核心命名空间System.IO2. 流的分类文件流 FileStream底层字节流读写所有类型文件文本、图片、视频文本读写流 StreamReader/StreamWriter专门读写文本文件简化字符操作内存流 MemoryStream内存中读写数据无需操作本地文件3. 常用IO操作示例1文本文件快速读写推荐// 快速写入文本覆盖原有内容 File.WriteAllText(test.txt, Hello C# IO流); // 快速读取文本 string content File.ReadAllText(test.txt); Console.WriteLine(content); // 追加内容 File.AppendAllText(test.txt, \n追加的新内容);2流式读写大文件推荐避免内存溢出// 写入大文件 using (StreamWriter sw new StreamWriter(bigFile.txt)) { sw.WriteLine(第一行数据); sw.WriteLine(第二行数据); } // 读取大文件 using (StreamReader sr new StreamReader(bigFile.txt)) { string line; // 逐行读取节省内存 while ((line sr.ReadLine()) ! null) { Console.WriteLine(line); } }4. 核心注意事项所有流对象必须释放资源优先使用using语句自动释放小文件使用 File 静态方法大文件使用流式读写IO操作必须嵌套 try-catch处理文件不存在、权限不足等异常五、进程与线程——C# 多任务核心1. 核心概念与区别1进程Process进程是操作系统资源分配的最小单位是独立运行的程序实例如浏览器、VS、QQ。每个进程独占独立内存空间进程之间相互隔离、互不干扰。2线程Thread线程是CPU调度执行的最小单位是进程内的执行单元。一个进程至少包含一个主线程多个线程共享进程内存资源。2. 进程与线程核心区别对比维度进程线程资源占用占用内存、CPU资源高开销大轻量级开销极小内存隔离进程间内存完全隔离同进程线程共享内存通信难度跨进程通信复杂线程间通信简单崩溃影响单个进程崩溃不影响其他进程一个线程崩溃整个进程崩溃3. C# 线程基础用法// 1. 创建子线程 Thread thread new Thread(() { Console.WriteLine(子线程执行任务); Thread.Sleep(1000); // 线程休眠1秒 }); // 2. 启动线程 thread.Start(); // 3. 等待线程执行完毕 thread.Join(); Console.WriteLine(子线程执行完成主线程结束);4. 进阶补充开发常用主线程程序启动默认的唯一线程负责页面渲染、主逻辑执行线程阻塞Sleep、Join 会阻塞当前线程避免频繁阻塞主线程防止程序卡顿后续迭代实际开发中极少直接用 Thread优先使用 Task、ThreadPool、异步 async/await更高效、易管理六、知识点整体总结本文梳理的六大C#核心知识点构成了C#基础开发的基石各知识点各司其职、相互配合泛型解决代码复用和类型安全问题是所有泛型集合的基础Dictionary字典高效键值对存储适配高频查询、映射数据场景异常处理保障程序稳定性是所有IO、网络、复杂逻辑的必备容错机制IO流实现本地文件、内存数据的读写交互是数据持久化的核心进程线程实现多任务并发执行解决程序卡顿、高效执行