c# - Yield 关键字的具体用法是什么

标签 c# asp.net .net yield-return

在下面的代码中,我创建了一种使用 Yield 打印值的方法,另一种只是简单的列表迭代。所以我的问题是这两种方法获得的输出是相同的,那么为什么我们要使用 Yield 关键字呢?另外请告诉我 Yield 关键字在应用中的具体用法。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace YieldKeyWordEg
{
    class Program
    {
        static void Main(string[] args)
        {
            Animals obj = new Animals();
            Console.WriteLine("------ Using Yield ------");
            foreach (var item in obj.GetName())
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("------ Using List Iteration ------");
            foreach (var items in obj.GetNameinList())
            {
                Console.WriteLine(items);
            }
            Console.ReadLine();
        }
    }
    class Animals
    {
        public IEnumerable<string> GetName()
        {
            List<string> objList = new List<string>();
            objList.Add("Cow");
            objList.Add("Goat");
            objList.Add("Deer");
            objList.Add("Lion");
            foreach (var item in objList)
            {
                yield return item;
            }
        }
        public List<string> GetNameinList()
        {
            List<string> objList = new List<string>();
            objList.Add("Cow");
            objList.Add("Goat");
            objList.Add("Deer");
            objList.Add("Lion");
            return objList;
        }
    }
}

输出:

------ Using Yield ------
Cow
Goat
Deer
Lion
------ Using List Iteration ------
Cow
Goat
Deer
Lion

最佳答案

直接来自MSDN

You use a yield return statement to return each element one at a time.When a yield return statement is reached in the iterator method, expression is returned, and the current location in code is retained. Execution is restarted from that location the next time that the iterator function is called.

编辑: 要获取详细信息,请参阅 this系列文章。

关于c# - Yield 关键字的具体用法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907274/

相关文章:

c# - 检查倒计时器是否为0

c# - 通过 Linq 表达式树识别事件

asp.net - MSBuild 覆盖输出文件名

c# - 使用 ASP.NET 网格显示分层 xml 数据

c# - .NET Core 基于角色的身份 Cookie 动态过期

.net - .NET 内存管理在托管代码中是否比在 native 代码中更快?

c# - 如何使用 C# 更改文件夹中每个文件的只读文件属性?

c# - 将 Redis 与 SignalR 结合使用

.net - 如何在继承自另一个一次性类的类中实现一次性模式?

c# - 为什么为资源文件生成的类在具有不同名称的文件中?