泛型与集合

泛型与集合

学习时间 :10分钟
难度级别 :进阶
适用对象:有C#基础的开发者


一、学习目标

  1. 理解泛型的概念和优势
  2. 掌握常用泛型集合
  3. 学会自定义泛型类和方法
  4. 了解泛型约束的使用

二、核心内容

2.1 泛型基础

为什么需要泛型?

csharp 复制代码
// 非泛型方式 - 需要装箱拆箱
ArrayList list = new ArrayList();
list.Add(1);        // 装箱
int num = (int)list[0];  // 拆箱

// 泛型方式 - 类型安全,无装箱
List<int> list = new List<int>();
list.Add(1);
int num = list[0];  // 无需转换

2.2 常用泛型集合

List 列表:

csharp 复制代码
List<string> names = new List<string>();
names.Add("张三");
names.AddRange(new[] { "李四", "王五" });

string first = names[0];
names.Remove("张三");
bool exists = names.Contains("李四");

Dictionary<TKey, TValue> 字典:

csharp 复制代码
Dictionary<string, int> scores = new Dictionary<string, int>();
scores.Add("张三", 90);
scores["李四"] = 85;

if (scores.TryGetValue("张三", out int score))
{
    Console.WriteLine($"分数:{score}");
}

Queue 队列:

csharp 复制代码
Queue<string> queue = new Queue<string>();
queue.Enqueue("任务1");
queue.Enqueue("任务2");

string task = queue.Dequeue();  // 取出并移除
string peek = queue.Peek();     // 查看不移除

Stack 栈:

csharp 复制代码
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);

int top = stack.Pop();   // 弹出栈顶
int peek = stack.Peek(); // 查看栈顶

2.3 自定义泛型类

csharp 复制代码
public class Result<T>
{
    public bool Success { get; set; }
    public string Message { get; set; }
    public T Data { get; set; }

    public static Result<T> Ok(T data)
    {
        return new Result<T> { Success = true, Data = data };
    }

    public static Result<T> Fail(string message)
    {
        return new Result<T> { Success = false, Message = message };
    }
}

// 使用
Result<int> result = Result<int>.Ok(100);

2.4 泛型方法

csharp 复制代码
public T Max<T>(T a, T b) where T : IComparable<T>
{
    return a.CompareTo(b) > 0 ? a : b;
}

// 使用
int max = Max(10, 20);
string maxStr = Max("abc", "xyz");

2.5 泛型约束

约束 说明
where T : class T 必须是引用类型
where T : struct T 必须是值类型
where T : new() T 必须有无参构造函数
where T : BaseClass T 必须继承自 BaseClass
where T : Interface T 必须实现 Interface
csharp 复制代码
public class Repository<T> where T : class, new()
{
    public T Create()
    {
        return new T();
    }
}

三、实践练习

练习1:使用字典

创建一个设备字典,存储设备名称和IP地址。

练习2:自定义泛型类

创建一个通用的响应结果类。


四、学习结果检验

完成本节学习后,你应该能够:

  • 使用 List 和 Dictionary
  • 定义泛型类和方法
  • 理解泛型约束的作用
  • 选择合适的集合类型

五、本节总结

复制代码
┌─────────────────────────────────────────┐
│           本节要点回顾                    │
├─────────────────────────────────────────┤
│ 1. 泛型提供类型安全和性能优势             │
│ 2. List<T> 是最常用的集合                │
│ 3. Dictionary<K,V> 用于键值对存储        │
│ 4. 泛型约束限制类型参数范围               │
└─────────────────────────────────────────┘

下一节预告:委托与事件


相关推荐
花落人散处1 小时前
CDiskClean 开发历程——忽略进程_拖拽功能实现参考
c#
xcLeigh3 小时前
Unity基础:C#脚本的创建与挂载——让你的游戏物体活起来
游戏·unity·c#·教程
花落人散处4 小时前
CDiskClean 开发历程——文件&进程实时监控-实现方案参考
c#
猿长大人7 小时前
C# | MediatR 入门指南:后端架构解耦
分布式·后端·架构·c#·.net
回忆2012初秋7 小时前
C# 中的 EAP:基于事件的异步编程全面指南(一)
开发语言·c#
曹牧8 小时前
C#:Type
开发语言·c#
用户3721574261359 小时前
C# 如何在 Excel 中创建下拉列表:3 种常见数据源实现方式
c#
czhc11400756639 小时前
工业视觉检测中的通用设计模式与技术笔记
c#
明如正午10 小时前
【C#】volatile 关键字深度解析:为什么我的停止按钮有时失灵?
c#