编辑
2025-09-26
C#
00

目录

摘要
正文
1.将一个集合中的数据绑定到ListBox控件
2.异步操作,假设我们需要在WinForm应用中进行一个耗时的操作,但又不希望阻塞用户界面。
延迟加载大量数据

摘要

C#中的yield关键字是一个强大的工具,可以在WinForm应用程序中提供更灵活和高效的编程体验。通过使用yield,我们可以简化代码并增加可读性,同时还能提供更好的性能。

正文

一、yield的应用场景:

  1. 数据绑定:使用yield可以轻松地将数据源与WinForm控件进行绑定,实现数据的动态更新和显示。
  2. 异步编程:yield使得在WinForm应用中实现异步操作变得更加简单和直观。
  3. 迭代器:通过yield可以实现自定义的迭代器,方便地遍历和操作集合类型数据。

二、yield的优点:

  1. 简化代码:使用yield可以减少冗余代码,提高代码的可读性和可维护性。
  2. 节省内存:yield允许按需生成数据,避免一次性生成大量数据导致内存占用过高。
  3. 提高性能:通过yield可以实现延迟加载和惰性计算,从而提高应用程序的性能。

1.将一个集合中的数据绑定到ListBox控件

image.png

C#
private IEnumerable<string> GetData() { // 模拟从数据库或其他数据源中获取数据 List<string> data = new List<string>() { "数据1", "数据2", "数据3" }; foreach (string item in data) { yield return item; } } private void btnBind_Click(object sender, EventArgs e) { listBox1.DataSource = GetData().ToList(); }

2.异步操作,假设我们需要在WinForm应用中进行一个耗时的操作,但又不希望阻塞用户界面。

image.png

C#
private IEnumerable<string> DoLongOperation() { // 模拟耗时操作 for (int i = 0; i < 10; i++) { yield return $"操作{i + 1}完成"; Thread.Sleep(1000); } } private async void btnDo_Click(object sender, EventArgs e) { foreach (string result in DoLongOperation()) { // 更新UI或执行其他操作 label1.Text = result; await Task.Delay(1000); } }

延迟加载大量数据

C#
private IEnumerable<int> GenerateData() { for (int i = 1; i <= 1000000; i++) { yield return i; } } private void ProcessData() { IEnumerable<int> data = GenerateData(); foreach (int item in data) { // 处理数据 Console.WriteLine(item); } }

我们通过yield生成了一个包含100万个整数的数据源。然而,由于使用了yield,数据并不会一次性全部生成,而是在需要时按需生成。这样可以避免一次性加载大量数据导致内存占用过高,同时保证了应用程序的性能。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!