C#基础:Iterators(迭代器)

作者:微信公众号:【架构师老卢】
8-3 18:42
29

概述:在 C# 中,迭代器提供了一种方便的方式来循环访问数据集合或序列。它们允许您为类定义自定义迭代行为,类似于将 foreach 用于内置集合(如数组或列表)的方式。C# 语言中的迭代器1. 迭代器方法(yield Keyword)C# 中的迭代器方法是使用 yield 关键字定义的。此关键字用于一次返回一个集合的每个元素,这允许调用者循环访问集合,而无需一次将整个序列加载到内存中。语法public IEnumerable MyIteratorMethod() {   // yield return statements }1. 返回类型:迭代器方法通常返回 IEnumerableT、IEn

在 C# 中,迭代器提供了一种方便的方式来循环访问数据集合或序列。它们允许您为类定义自定义迭代行为,类似于将 foreach 用于内置集合(如数组或列表)的方式。

C# 语言中的迭代器

1. 迭代器方法(yield Keyword)

C# 中的迭代器方法是使用 yield 关键字定义的。此关键字用于一次返回一个集合的每个元素,这允许调用者循环访问集合,而无需一次将整个序列加载到内存中。

语法

public IEnumerable MyIteratorMethod()  
{  
  // yield return statements  
}

1. 返回类型:

迭代器方法通常返回 IEnumerable<T>IEnumerable<T> 或实现 IEnumerable<T>; 的自定义类型。

2.收益率回报:

此语句逐个返回序列的每个元素。方法执行暂停,并保留当前状态,允许调用方检索生成的值。

3. 屈服突破:

此语句表示迭代的结束。它终止迭代并将控制权归还给调用方。

public IEnumerable<int> FetchNumbers()  
{  
  for (int i = 1; i <= 10; i++)  
  {  
    yield return i;  
  }  
}

使用迭代器:

可以将 C# 中的迭代器方法与 foreach 循环或 LINQ 查询一起使用,就像任何其他集合一样:

var numbers = FetchNumbers();  
foreach (var number in numbers)  
{  
  Console.WriteLine(number);  
}

LINQ 查询:

您可以使用 Linq aslo 来迭代产量数字。

var evenNumbers = FetchNumbers().Where(num => num % 2 == 0);

1.懒惰评估:

元素是按需生成的,这提高了性能和内存效率。

2. 简化代码:

迭代器方法简化了需要生成序列或集合的代码。

3. 集成:

与 LINQ 无缝集成以进行查询。

总结

C# 中的迭代器提供了一种强大的机制,用于定义自定义可枚举类型或序列,而无需实现整个 IEnumerable 接口。在处理大型数据集时,或者当您想要将数据生成和数据使用的关注点分开时,它们特别有用。

阅读排行