首页 > 后端开发 > C++ > '收益”关键字如何在C#中起作用以创建迭代器并提高性能?

'收益”关键字如何在C#中起作用以创建迭代器并提高性能?

Linda Hamilton
发布: 2025-01-27 17:41:08
原创
783 人浏览过

How Does the `yield` Keyword Work in C# to Create Iterators and Improve Performance?

C# 中 yield 关键字:迭代器与性能优化

yield 关键字在 C# 中扮演着至关重要的角色,它简化了枚举器的实现和迭代器的创建,显着提升了代码的可读性和性能。让我们深入了解其功能。

逐步返回结果 (Yielding Results)

yield 关键字允许方法暂停其执行,并逐步返回结果。当调用函数迭代一个实现了 IEnumerable 接口的对象时,包含 yield 关键字的方法会被重复调用,直到返回序列结束。此机制称为“逐步返回”(yielding)。

例如,考虑以下代码片段:

<code class="language-csharp">IEnumerable<object> FilteredList()
{
    foreach (object item in FullList)
    {
        if (IsItemInPartialList(item))
            yield return item;
    }
}</code>
登录后复制

FilteredList() 方法根据条件从 FullList 中逐步返回对象。当调用方迭代结果时,该方法会逐一返回每个匹配项。

实现迭代器 (Implementing Iterators)

yield 关键字简化了自定义迭代器的创建。在 C# 的早期版本中,必须使用 IEnumerator 对象手动实现枚举器。 yield 提供了一种更简洁、更声明式的方法:

<code class="language-csharp">public IEnumerable<int> Integers()
{
    yield return 1;
    yield return 2;
    yield return 4;
    yield return 8;
    yield return 16;
    yield return 16777216;
}</code>
登录后复制

这段代码返回一个整数序列,无需显式迭代逻辑。

实际应用 (Real-Life Usage)

在实际应用中,yield 常用于惰性求值场景,例如从数据库检索数据。考虑以下示例:

<code class="language-csharp">public IEnumerable<T> Read<T>(string sql, Func<IDataReader, T> make, params object[] parms)
{
    using (var connection = CreateConnection())
    {
        using (var command = CreateCommand(CommandType.Text, sql, connection, parms))
        {
            command.CommandTimeout = dataBaseSettings.ReadCommandTimeout;
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    yield return make(reader);
                }
            }
        }
    }
}</code>
登录后复制

此方法构造一个枚举器,从数据库表中获取记录,并根据提供的映射函数 make() 创建类型为 T 的对象。通过使用 yield,该方法避免将整个结果集加载到内存中,从而在处理大型数据集时提高性能。

以上是'收益”关键字如何在C#中起作用以创建迭代器并提高性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板