Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
当前位置: 主页 > vs2010教程 >

Visual Studio2010讲解C#4.0语法(4)--使用yield迭代器

时间:2010-08-06 18:40来源:未知 作者:admin 点击:

在yield迭代器块中用于向枚举数对象提供值或发出迭代结束信号。它的形式为下列之一:

yield return <expression>;
yield break;计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。
yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。这类方法、运算符或访问器的体受以下约束的控制:

不允许不安全块。

方法、运算符或访问器的参数不能是 ref 或 out。

yield 语句不能出现在匿名方法中。有关更多信息,请参见 匿名方法(C# 编程指南)。

当和 expression 一起使用时,yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中。

在下面的示例中,迭代器块(这里是方法 Power(int number, int power))中使用了 yield 语句。当调用 Power 方法时,它返回一个包含数字幂的可枚举对象。注意 Power 方法的返回类型是 IEnumerable(一种迭代器接口类型)。

 比如下面的例子:
public class List
{
    //using System.Collections;
    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()
    {
        // Display powers of 2 up to the exponent 8:
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
    }
}
/*
Output:
2 4 8 16
我们来看一个实例:
首先打开Visual Studio2010创建一个基于C#的ConsoleApplication工程Yield:

然后打开Yield.cs文件加入下列代码:

using System;  
using System.Collections.Generic;  
using System.Text;  
 
namespace Yield  
{  
    class Yield  
    {  
        public static class NumberList  
        {  
            // 创建一个整数数组  
            public static int[] ints = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 };  
 
            // 定义一个只返回偶数的属性。  
            public static IEnumerable<int> GetEven()  
            {  
                // 使用yield返回列表中的偶数  
                foreach (int i in ints)  
                    if (i % 2 == 0)  
                        yield return i;  
            }  
 
            // 定义一个只返回奇数的属性。  
            public static IEnumerable<int> GetOdd()  
            {  
                // 使用yield返回列表中的奇数  
                foreach (int i in ints)  
                    if (i % 2 == 1)  
                        yield return i;  
            }  
        }  
 
        static void Main(string[] args)  
        {  
 
            // 显示偶数:  
            Console.WriteLine("Even numbers");  
            foreach (int i in NumberList.GetEven())  
                Console.WriteLine(i);  
 
            // 显示奇数:  
            Console.WriteLine("Odd numbers");  
            foreach (int i in NumberList.GetOdd())  
                Console.WriteLine(i);  
            Console.Read();  
        }  
    }  


按下F5开始调试,运行界面如下:


 

 

(责任编辑:admin)
Tags:vs2010 C#4.0
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价