泛型与集合
学习时间 :10分钟
难度级别 :进阶
适用对象:有C#基础的开发者
一、学习目标
- 理解泛型的概念和优势
- 掌握常用泛型集合
- 学会自定义泛型类和方法
- 了解泛型约束的使用
二、核心内容
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. 泛型约束限制类型参数范围 │
└─────────────────────────────────────────┘
下一节预告:委托与事件