通过实例解析 C# yield 关键字使用方法
什么是 yield?
在 C# 中,yield
是一个关键字,用于支持生成枚举器的语法。它在迭代器中使用,可以让我们更容易地实现迭代器的功能。
yield
关键字提供了一个简单的方式来创建许多常见的枚举器,并且不需要手动实现全部的迭代器的代码。使用 yield
关键字可以大大简化这个过程,因此是 C# 中一个非常重要和强大的语言特性。
基础语法
以下是 yield
关键字的一些基础用法:
// 使用 yield 返回一个字符串数组
IEnumerable<string> GetStrings()
{
yield return "Hello";
yield return "World";
yield return "!";
}
// 使用 yield 返回一个整数序列
IEnumerable<int> GetNumbers()
{
for (int i = 0; i < 10; i++)
{
yield return i;
}
}
使用示例
以下是两个使用 yield
关键字的示例:
示例1
我们创建一个结构体 Person
,其中包含 Name
和 Age
属性。此外,我们创建一个 PeopleStore
类,用于存储 Person
对象的集合。
我们现在希望遍历整个 PeopleStore
集合,并打印每个 Person
对象的信息。我们可以使用 yield
关键字来实现这个功能,如下所示:
public struct Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PeopleStore
{
private List<Person> people = new List<Person>();
// 添加人员的方法
public void Add(Person p)
{
people.Add(p);
}
// 枚举器方法
public IEnumerable<Person> GetPeople()
{
foreach (Person p in people)
{
yield return p;
}
}
}
// 示例1
static void Main(string[] args)
{
PeopleStore store = new PeopleStore();
store.Add(new Person { Name = "张三", Age = 30 });
store.Add(new Person { Name = "李四", Age = 40 });
store.Add(new Person { Name = "王五", Age = 50 });
foreach (Person p in store.GetPeople())
{
Console.WriteLine("{0} ({1}岁)", p.Name, p.Age);
}
}
在上面的示例中,我们定义了一个 PeopleStore
类,里面包含了一个 GetPeople()
方法,该方法返回一个 struct Person
类型的集合。GetPeople()
方法使用了 yield return
来实现,在遍历集合时,我们可以直接使用 foreach
循环来遍历,这些操作都被 yield
隐藏了,而我们只需要专注于需要展示的 Person
对象即可。
示例2
我们现在需要写一个能够返回斐波那契数列的方法。我们可以使用 yield
来创建这样一个数列生成器,如下所示:
public static IEnumerable<int> Fibonacci(int n)
{
int a = 0;
int b = 1;
for (int i = 0; i < n; i++)
{
int temp = a;
a = b;
b = temp + b;
yield return a;
}
}
// 示例2
static void Main(string[] args)
{
foreach (int i in Fibonacci(10))
{
Console.WriteLine(i);
}
}
在上面的示例中,我们定义了一个 Fibonacci()
方法,该方法返回一个斐波那契数列,用于输出前 n
个数。方法使用了 yield return
语句,可以在枚举器中生成数值。使用 foreach
循环可以直接遍历这个数列,并输出每个斐波那契数列的数字。
总结
yield
关键字是 C# 中一个非常有用的语言特性,它可以帮助我们更简单和高效地实现枚举器。无论你是要遍历集合,还是生成一系列数字,yield
都能给你提供帮助,并让你的代码看起来更整洁和易懂。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过实例解析c# yield关键字使用方法 - Python技术站