yield在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。它的形式为下列之一:
yield return <expression>;
yield break;
计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。
yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。这类方法、运算符或访问器的体受以下约束的控制:
l 不允许不安全块。
l 方法、运算符或访问器的参数不能是 ref 或 out。
yield 语句不能出现在匿名方法中。
当和 expression 一起使用时,yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中。
示例
在下面的示例中,迭代器块(这里是方法 Power(int number, int power))中使用了 yield 语句。当调用 Power 方法时,它返回一个包含数字幂的可枚举对象。注意 Power 方法的返回类型是 IEnumerable(一种迭代器接口类型)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//
using System.Collections;
namespace MvcUsedKeywords
{
public class List
{
public static IEnumerable Power(int number, int exponent)
{
int counter = 0;
int result = 1;
while(counter++ <exponent)
{
result=result*number;
yield return result;
}
}
static void Main(string[] args)
{
//显示2的x方(1<=x<=8)
IEnumerable t = Power(2, 8);
foreach (int i in t)
{
Console.Write("{0} ",i);
}
}
}
}
结果:2 4 8 16 32 64 128 256
分享到:
相关推荐
EntityFramework(EF)是.NET框架中的一个对象关系映射(ORM)工具,它允许开发者使用C#或VB.NET代码操作数据库,而无需编写SQL语句。这个复习资料的主题聚焦在两个重要的C#特性:拓展方法和`yield`关键字,它们在EF...
5. 迭代器与yield关键字:迭代器允许自定义集合的遍历方式,yield关键字在生成器函数中用于逐个产生值,降低了内存压力,尤其适用于大数据处理。 6. 异常处理:C#中的try-catch-finally语句用于捕获和处理异常,...
关于c#中的yield关键字大家可以参考这篇文章:https://www.jb51.net/article/63859.htm 我使用的是kotlin,下面的方法演示了产生一个序列的功能。 val fibonacciSeq = buildSequence { var a = 0 var b = 1 ...
在C#中,可以使用`static`关键字和`lock`语句实现线程安全的单例。 2. **工厂模式(Factory Method)**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。C#中的抽象工厂类可以返回不同类型的实例,实现...
使用`yield`关键字实现的迭代器,常用于生成器,允许在运行时逐个返回集合元素,无需一次性加载所有数据。 10. **泛型约束** 泛型可以指定类型约束,如`where T : struct`约束T为值类型,`where K : IDisposable`...
通过使用yield关键字,开发者可以创建自定义的迭代行为,如遍历集合或生成序列,而无需编写复杂的循环结构。 在版本2005中,C#引入了自动属性,简化了类的属性声明。自动属性允许开发者省略getter和setter的实现,...
- `return`: 从方法中返回值或结束方法执行。 3. **类型和变量**: - `bool`: 布尔类型,表示真或假。 - `int`: 32位整型。 - `double`: 双精度浮点型。 - `string`: 文本字符串。 - `object`: 所有类型的...
在.NET框架中,扩展方法是一种为已存在类型添加新功能而无需继承或使用装饰者模式的方式。这些方法看起来像是类的实例方法,但实际上它们是静态方法,通过`this`关键字应用于目标类型。在ASP.NET编程中,扩展方法...
这可能涉及使用`foreach`循环,或者更高效的方法如`yield return`生成器。 6. **性能优化**:对于大数据集,需要注意性能问题。可能的优化策略包括延迟加载、并行计算(如`Parallel.ForEach`)或使用适当的数据结构...
9. **迭代器**:迭代器通过实现IEnumerable接口或使用yield return关键字创建,用于遍历集合或生成序列。常用的接口有IEnumerable和IEnumerator。 10. **泛型**:泛型允许在定义类型或方法时使用类型参数,提高代码...
4. 局部类:局部类是在同一源文件内定义的类,但可以分布在多个文件中,通过partial关键字实现。这对于大型项目和代码生成器的使用非常有用,因为它允许团队成员并行工作,同时保持代码的组织清晰。 母版页是ASP...
- Override:用于子类覆盖父类的虚方法,要求父类方法被abstract或virtual修饰,子类使用override关键字明确表示覆盖。 - 重载:在同一类中,通过不同的参数列表(参数类型、数量或顺序不同)定义多个同名方法。 ...
4. 遍历器和yield关键字:C# 2.0引入的遍历器使得可以自定义迭代行为,yield关键字允许在运行时生成序列。这在处理大量数据或需要按需生成结果的场景中非常有用。源代码中可能会有使用yield实现的无限序列或者延迟...
2. **迭代器(Iterators)**:通过`yield return`关键字实现,简化了生成集合序列的过程,例如在实现枚举器时。 3. **自动属性(Auto-Implemented Properties)**:简化了类属性的声明,减少了冗余代码。 4. **可...