c# list/task/ dictionary/委托简单到高级使用

在 C# 编程中,ListTaskDictionary 和委托(Delegates)是常用的数据结构和功能特性,它们在处理集合、异步编程、键值对存储以及事件和回调实现中扮演着重要角色。

C# List

List<T> 是 C# 中的一个泛型集合,它实现了 IList<T> 接口,用于存储一个可增长和缩减的对象序列。List<T> 提供了添加、删除、查找和排序元素的方法。

  • 创建 List:

    List<int> numbers = new List<int>();
  • 添加元素:

    numbers.Add(1); // 添加单个元素
    numbers.AddRange(new List<int> { 2, 3, 4 }); // 添加多个元素
  • 访问元素:

    int firstElement = numbers[0]; // 获取第一个元素
  • 遍历 List:

    foreach (int number in numbers)
    {
    Console.WriteLine(number);
    }

C# Task

Task 是 C# 中用于异步编程的一个核心组件,它表示一个异步操作的最终完成。Task 可以返回一个结果或者不返回任何结果(Task 类型),并且可以与其他 Task 对象组合和等待它们的完成。

  • 创建 Task:

    Task.Run(() => {
    // 异步执行的代码
    });
  • 等待 Task 完成:

    await Task.Run(() => {
    // 异步执行的代码
    });
  • 组合 Task:

    Task.WhenAll(tasks); // 等待多个 Task 完成

C# Dictionary

Dictionary<TKey, TValue> 是一个泛型集合,用于存储键值对。它实现了 IDictionary<TKey, TValue> 接口,提供了快速的查找、插入和删除操作。

  • 创建 Dictionary:

    Dictionary<string, int> ages = new Dictionary<string, int>();
  • 添加元素:

    ages.Add("Alice", 25); // 添加键值对
  • 访问元素:

    int age = ages["Alice"]; // 获取特定键的值
  • 遍历 Dictionary:

    foreach (KeyValuePair<string, int> pair in ages)
    {
    Console.WriteLine($"{pair.Key}: {pair.Value}"); } 
 

C# 委托委托(Delegates

  • 是 C# 中一种类型安全的函数指针,

  • 它可以引用具有特定参数列表和返回类型的方法。

  • 委托在实现回调、事件处理以及线程间的通信中非常有用。

  • - **定义委托:

  • public delegate void MyDelegate(string message);

  • 创建委托实例:

  • MyDelegate del = new MyDelegate(ShowMessage);

  • 调用委托:

  • del("Hello, World!"); // 调用委托,

输出消息 

  public event MyDelegate OnMessageReceived;  OnMessageReceived?.Invoke("New message"); // 触发事件

深入探讨 C# 中的 ListTaskDictionary 和委托的高级用法和一些最佳实践。

高级用法和最佳实践 - List

  1. 使用 LINQ 查询 List: LINQ (Language Integrated Query) 提供了一种强大的查询机制,可以用来对 List 进行复杂的筛选、排序和转换操作。

var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
  1. 异步操作 List: 当处理大量数据时,可以使用 async 和 await 关键字结合 Task 来异步执行操作,避免阻塞主线程。

await Task.Run(() => {
numbers.Sort();
});

高级用法和最佳实践 - Task

  1. 链式 Task 调用: 可以使用 ContinueWith 方法来创建任务的链式调用,实现复杂的异步工作流。

Task.Run(() => {
// 第一个任务
}).ContinueWith(prevTask => {
// 第二个任务,依赖于第一个任务的结果
});

  1. 取消任务: 通过 CancellationToken 可以取消正在执行的任务,避免资源浪费。

var cancellationTokenSource = new CancellationTokenSource();
Task.Run(() => {
while (!cancellationTokenSource.Token.IsCancellationRequested) {
// 执行长时间运行的任务
}
}, cancellationTokenSource.Token);
// 在需要时取消任务
cancellationTokenSource.Cancel();

高级用法和最佳实践 - Dictionary

  1. 使用计算属性: 当需要根据某些条件动态计算值时,可以使用计算属性。

ages["Alice"] = age => age + 1; // 假设 age 是一个外部变量
  1. 初始化 Dictionary: 可以使用对象初始化器来简化 Dictionary 的初始化过程。

Dictionary<string, int> ages = new Dictionary<string, int>
{
{"Alice", 25},
{"Bob", 30}
};

高级用法和最佳实践 - 委托

  1. 使用 lambda 表达式简化委托: lambda 表达式提供了一种简洁的方式来创建委托实例。

Action<string> printMessage = message => Console.WriteLine(message);
printMessage("Hello, World!");
  1. 多播委托: 多播委托允许将多个方法链接到同一个委托实例,当调用委托时,所有链接的方法都会被执行。

Action<string> multicastDelegate = message => Console.WriteLine(message);
multicastDelegate += (msg) => MessageBox.Show(msg);
multicastDelegate("Hello, World!"); // 会在控制台输出并显示消息框
  1. 使用委托实现事件: 委托在实现事件和回调机制时非常有用,可以轻松地管理和触发多个订阅者。

public delegate void DataReceivedEventHandler(object sender, string data);
public event DataReceivedEventHandler DataReceived;

protected virtual void OnDataReceived(string data)
{
DataReceived?.Invoke(this, data);
}

通过这些高级用法和最佳实践,你可以更有效地利用 C# 中的 ListTaskDictionary 和委托,编写出更加高效、灵活和可维护的代码。这些特性是 C# 强大功能的一部分,能够帮助你解决复杂的编程问题。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mabanbang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值