在C#中,我们可以使用yield关键字来创建一个包含yield return语句的方法,该方法返回一个可枚举的集合。这样的方法可以在遍历时按需生成元素,而不需要一次性生成所有元素。下面是一个示例代码,展示了如何使用yield来遍历一个包含自定义对象的IEnumerable集合:
using System;
using System.Collections;
using System.Collections.Generic;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
public class People : IEnumerable
{
private List _people;
public People()
{
_people = new List
{
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35)
};
}
public IEnumerator GetEnumerator()
{
foreach (var person in _people)
{
yield return person;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class Program
{
public static void Main(string[] args)
{
var people = new People();
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
在上面的示例中,我们定义了一个Person
类,其中包含Name
和Age
属性。然后,我们定义了一个People
类,它实现了IEnumerable
接口。在GetEnumerator
方法中,我们使用yield return语句按需生成_people
列表中的每个对象。最后,在Main
方法中,我们通过foreach循环遍历People
对象,并输出每个人的姓名和年龄。
运行以上代码,输出将会是:
Name: Alice, Age: 25
Name: Bob, Age: 30
Name: Charlie, Age: 35
通过使用yield关键字,我们可以轻松地创建一个按需生成元素的可枚举集合。这种方法非常适用于需要遍历大型集合或需要在遍历时执行复杂计算的情况。