.NET 中实用的 yield return 提升代码质量

149 阅读3分钟

前言

在使用 C# 处理集合或序列时,你通常会编写循环或创建自定义迭代器来处理数据。虽然传统的循环结构非常强大,但它们可能会导致冗长且不易维护的代码。

yield return 语句是 C# 中的一个特性,它简化了迭代逻辑,帮助你编写更简洁、高效的代码。

什么是 yield return

yield return 语句用于迭代器方法中,以一次返回一个元素。当迭代器方法使用 yield return 时,它会在调用之间保持其状态,从而允许你暂停执行,并在迭代器再次被调用时从上次的执行点继续。这种方法与一次性返回整个集合的方式不同,提供了一种更节省内存的处理大量数据集或数据流的方式。

使用 yield return 的好处

  • 内存效率yield return 允许你按需生成和返回元素,而不是将整个集合存储在内存中,从而减少了内存开销。

  • 提高可读性:使用 yield return 的代码通常更简洁、更易读,因为它消除了在循环中手动维护状态或管理集合的需要。

  • 惰性计算yield return 实现了惰性计算,意味着元素只有在需要时才会被计算和返回。这可以提高性能,特别是在并非所有元素都立即需要的场景中。

  • 简化代码:它简化了复杂的迭代逻辑,减少了通常伴随自定义迭代器实现的样板代码。

yield return 如何工作?

为了理解 yield return 如何简化迭代,我们来看一个需要生成数字序列的场景。

传统方法

public IEnumerable<intGetNumbers(int max) 
{  
    List<int> numbers = new List<int>();  
    for (int i = 1; i <= max; i++)  
    {  
        numbers.Add(i);  
    }  
    return numbers;  
}  

使用 yield return

public IEnumerable<intGetNumbers(int max)  
{  
    for (int i = 1; i <= max; i++)  
    {  
        yield return i;  
    }  
}  

在传统方法中,List<int> 被填充数字,这需要额外的内存和初始化时间。而使用 yield return 时,数字会在调用者请求时按需生成并返回。

实际案例:过滤数据

假设你有一个大型数据集合,并且需要对其进行过滤和处理。

使用 yield return,你可以创建一个方法,仅在满足特定条件时处理并返回每个项,而无需将整个数据集加载到内存中。

public IEnumerable<stringGetLongWords(string[] words)  
{  
    foreach (var word in words)  
    {  
        if (word.Length > 5)  
        {  
            yield return word;  
        }  
    }  
}  

在这里,GetLongWords 方法只返回长度超过五个字符的单词。

该方法会处理每个单词,并在条件满足时返回它。这样,只处理并返回必要的单词,从而最小化内存使用。

总结

C# 中的 yield return 语句是一个强大的工具,它可以简化迭代逻辑、提高代码质量并优化内存使用。

通过按需生成并返回元素,它帮助你编写更简洁、高效、可维护性更高的代码。

无论你是在处理大型数据集还是复杂的迭代逻辑,yield return 都可以成为你 C# 编程工具包中的有用补充。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

链接:c-sharpcorner.com/article/iterations-and-improving-code-quality-with-c-sharp-yield-return/

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!