当前位置: 首页 > 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.jsqmd.com/news/926249/

相关文章:

  • 告别手动数框!快速检查YOLO格式数据集标签分布的保姆级教程
  • Qt UDP 接收遇到 QMessageBox 弹窗为什么一定会卡住界面更新
  • S283物联网自助设备支付自助设备支付盒子:多设备运营的远程管理方案
  • 在CentOS 7上搞定Silvaco TCAD 2012安装:一个踩过所有坑的保姆级记录
  • 私人音乐播放服务
  • RCS分析中节点数怎么选?3个还是5个?用实际数据带你跑一遍Harrell《RMS》书里的推荐方法
  • 2026崇贤体态管理瑜伽普拉提机构推荐:崇贤普拉提私教课、崇贤普拉提馆、崇贤瑜伽小班课、崇贤瑜伽普拉提馆、崇贤瑜伽馆免费体验选择指南 - 优质品牌商家
  • 鸿蒙原生应用开发完全指南:从环境搭建到第一个项目运行引言
  • 2025第十六届蓝桥杯c/c++B组国赛题解
  • 方达炬:放飞炬人集团是一个典型的政治体。企业法人仅是放飞炬人集团的最小经济单位。
  • 小白也会:Codex 如何接入 DazeAPI 中转站:从安装、注册到密钥配置
  • Django+Vue养老院健康跟踪系统源码+论文
  • 云南活动执行哪家好?策划/搭建/设备/物料一体化服务
  • KMeans聚类实战:用Python给客户分群,5步搞定RFM模型分析
  • 简单记录---小小的第一步
  • 别再当AI的‘盲盒玩家’:用SHAP和LIME手把手拆解你的机器学习模型(Python实战)
  • 2026年正规GPS定位器TOP5评测:北斗卫星定位器/单北斗定位器/定位器产品/宠物定位器/微型定位器/无线定位器/选择指南 - 优质品牌商家
  • Arm Neoverse V2 PMU架构与性能监控实践
  • Spring Boot 、Spring Cloud 微服务架构认证授权方案
  • 2026年优质镍锻件TOP5推荐:N4纯镍板、N6纯镍板、N6镍卷带、N6镍管、纯镍棒、纯镍管、钛镍合金材料、钛镍材料选择指南 - 优质品牌商家
  • 200万token上下文怎么实现的?GPT-5.5架构拆解
  • UICollectionView基础
  • 国内的七大主流大模型推荐算法有那些差异
  • CC-Switch 全平台部署与使用正式教程【2026-05-31】
  • AI时代艺术家的反抗
  • 【AI问答】GoLang关于代码复用
  • 基于 Isolation Forest + PyOD + Streamlit 的工业设备异常检测与故障预警系统:Python 机器学习项目实战
  • 用Python实战LSTM:从数学建模到量化交易,手把手复现华中杯B题(附完整代码)
  • 2026年苏州本地正规房屋漏水维修三家机构核心能力梳理与场景适配分析 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • Gemini Agent框架实战:从零搭建可商用自动化工作流,含3套已通过SOC2认证的Prompt架构