手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#:foreach与yield语句的介绍
C#:foreach与yield语句的介绍
摘要:1.foreach语句C#编译器会把foreach语句转换为IEnumerable接口的方法和属性。复制代码代码如下:foreach(Per...

1. foreach语句

C#编译器会把foreach语句转换为IEnumerable接口的方法和属性。

复制代码 代码如下:

foreach (Person p in persons)

{

Console.WriteLine(p);

}

foreach语句会解析为下面的代码段。

•调用GetEnumerator()方法,获得数组的一个枚举

•在while循环中,只要MoveNext()返回true,就一直循环下去

•用Current属性访问数组中的元素

复制代码 代码如下:

IEnumerator enumerator = persons. GetEnumerator();

while (enumerator.MoveNext())

{

Person p = (Person) enumerator.Current;

Console.WriteLine(p);

}

2. yield语句

•yield语句的两种形式:

复制代码 代码如下:

yield return <expression>;

yield break;

•使用一个yield return语句返回集合的一个元素

•包含yield语句的方法或属性是迭代器。迭代器必须满足以下要求

a. 返回类型必须是IEnumerable、IEnumerable<T>、IEnumerator或 IEnumerator<T>。

b. 它不能有任何ref或out参数

•yield return语句不能位于try-catch快。yield return语句可以位于try-finally的try块

复制代码 代码如下:

try

{

// ERROR: Cannot yield a value in the boday of a try block with a catch clause

yield return "test";

}

catch

{ }

try

{

//

yield return "test again";

}

finally

{ }

try

{ }

finally

{

// ERROR: Cannot yield in the body of a finally clause

yield return "";

}

yield break语句可以位于try块或catch块,但是不能位于finally块

下面的例子是用yield return语句实现一个简单集合的代码,以及用foreach语句迭代集合

复制代码 代码如下:

using System;

using System.Collections.Generic;

namespace ConsoleApplication6

{

class Program

{

static void Main(string[] args)

{

HelloCollection helloCollection = new HelloCollection();

foreach (string s in helloCollection)

{

Console.WriteLine(s);

Console.ReadLine();

}

}

}

public class HelloCollection

{

public IEnumerator<String> GetEnumerator()

{

// yield return语句返回集合的一个元素,并移动到下一个元素上;yield break可以停止迭代

yield return "Hello";

yield return "World";

}

}

}

使用yield return语句实现以不同方式迭代集合的类:

复制代码 代码如下:

using System;

using System.Collections.Generic;

namespace ConsoleApplication8

{

class Program

{

static void Main(string[] args)

{

MusicTitles titles = new MusicTitles();

foreach (string title in titles)

{

Console.WriteLine(title);

}

Console.WriteLine();

foreach (string title in titles.Reverse())

{

Console.WriteLine(title);

}

Console.WriteLine();

foreach (string title in titles.Subset(2, 2))

{

Console.WriteLine(title);

Console.ReadLine();

}

}

}

public class MusicTitles

{

string[] names = { "a", "b", "c", "d" };

public IEnumerator<string> GetEnumerator()

{

for (int i = 0; i < 4; i++)

{

yield return names[i];

}

}

public IEnumerable<string> Reverse()

{

for (int i = 3; i >= 0; i--)

{

yield return names[i];

}

}

public IEnumerable<string> Subset(int index, int length)

{

for (int i = index; i < index + length; i++)

{

yield return names[i];

}

}

}

}

输出:

C#:foreach与yield语句的介绍1

【C#:foreach与yield语句的介绍】相关文章:

winform下实现win7 Aero磨砂效果实现代码

C#实现的几种委托方式介绍

c# 类和成员的修饰详细介绍

c# winform多线程的小例子

C#中的where泛型约束介绍

c#中DateTime.Now函数的使用详解

C# SendKeys使用方法介绍

深入C#中使用SqlDbType.Xml类型参数的使用详解

比较有效的使用C#读取文件的代码

C#读取QQ纯真IP数据库QQWry.Dat的代码

精品推荐
分类导航