当前位置: 首页 > news >正文

C# 泛型学习总结:从一头雾水到豁然开朗

一、先搞懂:泛型到底是个啥?

用最通俗的话来说:泛型就是「通用的模具」,不提前固定数据类型,让一段代码可以适配多种数据类型,不用重复写逻辑。

举个生活例子:我们做月饼,有圆形模具、方形模具,但如果有一个万能模具,想做豆沙、五仁、莲蓉月饼都能用,不用换模具 —— 这个万能模具,就是 C# 里的泛型

对应到代码里:不用专门为int写一个方法,为string再写一个一模一样的方法,为bool又写一遍…… 用泛型,一套代码通吃所有类型

二、为什么要学泛型?(不学就会踩的坑)

在没学泛型前,我们想让方法支持多种类型,常用两种「笨办法」:

1. 方法重载(写 N 遍重复代码)

// 打印int void Print(int a) { Console.WriteLine(a); } // 打印string void Print(string a) { Console.WriteLine(a); } // 打印bool void Print(bool a) { Console.WriteLine(a); }

缺点:代码大量重复,维护噩梦,改一处逻辑要改所有方法。

2. 使用 object(装箱拆箱,性能差 + 不安全)

C# 里所有类型都继承自object,所以可以用它接收任意类型:

void Print(object a) { Console.WriteLine(a); }

缺点:

  • 性能差:值类型(int、double 等)会发生装箱 / 拆箱,消耗资源
  • 不安全:可以传入任何类型,编译不报错,运行时才可能出错

泛型完美解决了这两个问题:✅ 代码不重复✅ 类型安全(编译时就检查错误)✅ 性能高(无装箱拆箱)

三、泛型最核心的语法:<> 符号

泛型的标志就是尖括号<T>,其中:

  • T类型参数(Type Parameter),可以理解成「类型占位符」
  • T可以换成任意字母,比如<T><U><T1,T2>,常用T代表 Type

四、初学者必学:3 种最常用的泛型用法

我在学习中发现,泛型主要用在泛型方法、泛型类、泛型集合这三个地方,也是工作中最常用的。

1. 泛型方法(最基础)

一个方法,支持任意类型参数,不用重载。

示例:通用的「两数交换」方法

// 泛型方法:T 代表任意类型 static void Swap<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; }

使用:

// 交换 int int x = 10, y = 20; Swap<int>(ref x, ref y); // 交换 string string s1 = "Hello", s2 = "World"; Swap<string>(ref s1, ref s2);

✅ 好处:一套代码,int、string、double、自定义类全都能用。


2. 泛型类(封装通用工具)

把整个类做成通用模板,比如通用的「仓库类」,可以存任意类型的数据。

示例:通用仓库类

// 泛型类:可以存储任意一个数据 public class Storage<T> { // 泛型字段 private T _data; // 泛型方法 public void SetData(T value) { _data = value; } public T GetData() { return _data; } }

使用:

// 存 int Storage<int> intStorage = new Storage<int>(); intStorage.SetData(100); // 存 string Storage<string> strStorage = new Storage<string>(); strStorage.SetData("泛型真好用");

3. 泛型集合(最常用!)

这是我们写代码天天用的泛型,比ArrayList好用 100 倍。

最常用的两个:

  • List<T>:动态数组
  • Dictionary<TKey, TValue>:键值对集合

示例:List<T> 存储不同类型

// 存 int List<int> numList = new List<int>(); numList.Add(1); numList.Add(2); // 存 string List<string> strList = new List<string>(); strList.Add("张三"); strList.Add("李四");

为什么推荐用List<T>而不是ArrayList

  • ArrayListobject,性能差、不安全
  • List<int>只能存 int,编译时就报错,安全又高效

五、进阶一点:泛型约束(给 T 加限制)

刚学的时候我会疑惑:如果T可以是任意类型,那我想让T必须是「数字类型」或者「必须实现某个接口」怎么办?

答案:泛型约束(where T : 约束条件)

常用约束:

  1. where T : struct→ T 必须是值类型(int、bool、decimal 等)
  2. where T : class→ T 必须是引用类型(类、接口、string)
  3. where T : new()→ T 必须有无参构造函数
  4. where T : 类名/接口名→ T 必须继承该类或实现该接口

示例:要求 T 必须是引用类型

public void Print<T>(T obj) where T : class { Console.WriteLine(obj); }

这时候传入int就会直接报错,保证类型安全。

六、初学者必须记住的泛型优点

学完泛型后,我总结了 4 个核心好处,也是面试常问:

  1. 代码复用:一套代码适配所有类型,不用重复造轮子
  2. 类型安全:编译时就检查类型错误,不会运行时崩溃
  3. 性能更高:没有装箱拆箱,比 object 方案快很多
  4. 代码更简洁优雅:少写大量重载方法,逻辑清晰

七、我的学习小总结

  1. 泛型的核心是<T>类型参数 ,代表「任意类型占位符」
  2. 优先使用泛型集合List<T>Dictionary<TKey,TValue>),放弃ArrayList
  3. 泛型方法、泛型类用来封装通用工具
  4. 不确定类型时用泛型,需要限制类型时用泛型约束
  5. 不用把泛型想得多复杂,它就是让代码更通用、更安全的工具
http://www.rkmt.cn/news/1437579.html

相关文章:

  • Qt UDP 接收遇到 QMessageBox 弹窗为什么一定会卡住界面更新
  • 在CentOS 7上搞定Silvaco TCAD 2012安装:一个踩过所有坑的保姆级记录
  • 私人音乐播放服务
  • 云南活动执行哪家好?策划/搭建/设备/物料一体化服务
  • Spring Boot 、Spring Cloud 微服务架构认证授权方案
  • 2026年优质镍锻件TOP5推荐:N4纯镍板、N6纯镍板、N6镍卷带、N6镍管、纯镍棒、纯镍管、钛镍合金材料、钛镍材料选择指南 - 优质品牌商家
  • UICollectionView基础
  • CC-Switch 全平台部署与使用正式教程【2026-05-31】
  • 用Python实战LSTM:从数学建模到量化交易,手把手复现华中杯B题(附完整代码)
  • Codex 从安装到国内接入跑通了:Windows / Mac / Linux 小白版记录
  • VirtualBox 7.0.x 在Win10/11上启动报错supR3HardenedWinReSpawn?保姆级修复教程(含注册表修改与驱动安装)
  • Kimi LeetCode 2911. 得到 K 个半回文串的最少修改次数 Java实现
  • 机械臂角度识别 机械臂自由度识别 yolov8机械臂关键点检测模型部署+教程+代码+数据集+工业应用
  • 2026年汽车静电阻隔面料实测评测:四家企业横向对比 - 优质品牌商家
  • 书匠策AI:你的课程论文救急神器,用过的人都说“真香“
  • 别再死记硬背了!用C语言手写一个test_and_set(),彻底搞懂操作系统硬件锁
  • AMP算法实战:用Python从零实现压缩感知信号恢复(附完整代码与避坑指南)
  • 实战落地+数据可视化:6月最新重庆优质GEO优化服务商榜单深度测评 - 品牌官
  • 2026年苏州防水维修标杆机构专业市场分析与全场景渗漏治理选型适配指南 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 集团首都公报:放飞炬人集团内政署批准起草《出口劳务法案》《劳务产能调整和AIQI技艺法案》
  • 【案例分享】我从失败中学到的架构教训
  • 2026年当下河北地区镶铜铸铁闸门采购指南:实力厂家深度解析 - 2026年企业资讯
  • 2026年当前秦皇岛婚礼酒店哪个好?深度解析秦皇岛万怡酒店婚宴实力 - 2026年企业资讯
  • 2026年q2四川无机涂料外墙厂家排行及选型推荐:无机涂料多少钱一平方/无机涂料工程专用/实力盘点 - 优质品牌商家
  • 2026年苏州本地专业防水补漏领域五家合规经营企业深度梳理与场景适配分析 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 2026年苏州3家资质齐全防水补漏服务商核心市场适配与专业能力分析报告 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 逐位二进制拼接 → 翻转 → 去头零 → 消邻重
  • 用Python和R实战检验皮尔逊相关性五大假设(附完整代码与可视化)
  • K-means实战避坑指南:如何用肘部法则和轮廓系数找到最佳K值(附Python代码)
  • HTML5 新特性概览:探索现代 Web 的强大能力