首页 > C# > yield 关键字在那里做什么?

yield 关键字在那里做什么?

上一篇 下一篇

在“如何仅公开 IList<> 的一个片段”中,其中一个答案具有以下代码片段:

IEnumerable<object> FilteredList()
{
    foreach(object item in FullList)
    {
        if(IsItemInPartialList(item))
            yield return item;
    }
}

yield 关键字在那里做什么?我已经在几个地方看到它被引用,还有一个问题,但我还没有完全弄清楚它实际上做了什么。我习惯于将产量视为一个线程屈服于另一个线程,但这在这里似乎无关紧要。

网友回答:

迭 代。它创建一个“幕后”状态机,该状态机记住您在函数的每个附加周期中的位置,并从那里开始。

网友回答:

产量有两个很大的用途,

  1. 它有助于提供自定义迭代,而无需创建临时集合。
  2. 它有助于进行有状态迭代。

为了更能说明以上两点,我制作了一个简单的视频,你可以在这里观看

网友回答:

上下文关键字实际上在这里做了很多事情。yield

该函数返回实现接口的对象。如果调用函数开始在此对象上,则会再次调用该函数,直到它“屈服”。这是 C# 2.0 中引入的语法糖。在早期版本中,您必须创建自己的对象和对象才能执行此类操作。IEnumerable<object>foreachIEnumerableIEnumerator

理解此类代码的最简单方法是键入示例,设置一些断点,然后查看会发生什么。尝试逐步完成此示例:

public void Consumer()
{
    foreach(int i in Integers())
    {
        Console.WriteLine(i.ToString());
    }
}

public IEnumerable<int> Integers()
{
    yield return 1;
    yield return 2;
    yield return 4;
    yield return 8;
    yield return 16;
    yield return 16777216;
}

单步执行示例时,您将找到对返回的第一个调用。第二个调用返回,并且不再执行该线路。Integers()12yield return 1

下面是一个现实生活中的例子:

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);
                }
            }
        }
    }
}

模板简介:该模板名称为【yield 关键字在那里做什么?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 240次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-23
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信公众平台 微信模板 单页式简历模板 微信素材 自适应 微信文章 响应式 企业网站 微信图片 html5
您可能会喜欢的其他模板