Inside.Net

自由与繁荣的国度

博客园 首页 新随笔 联系 订阅 管理
  12 Posts :: 0 Stories :: 29 Comments :: 0 Trackbacks

C#2.0 迭代器

关键字 yield return

C#2.0通过强大的yield return关键字无缝实现了迭代器模式。特别是减轻了开发者实现一个枚举器和可枚举类的负担。这里我重写了一个前面的例子:

using System;
using System.Collections;
public class Persons : IEnumerable
{
    
string[] m_Names;
    
public Persons(params string[] Names)
    
{
        m_Names 
= new string[Names.Length];
        Names.CopyTo(m_Names,
0);
    }

    
public IEnumerator GetEnumerator()
    
{
        
foreach (string s in m_Names)
        
{
            yield 
return s;
        }

    }

}

class Program
{
    
static void Main(string[] args)
    
{
        Persons arrPersons 
= new Persons(“Michel”,”Christine”,”Mathieu”,”Julien”);
        
foreach (string s in arrPersons)
        
{
            Console.WriteLine(s);
            Console.ReadLine();
        }

    }

}


别被yield return关键字的行为所困扰。Yield return关键字看起来像是返回了一个字符串但是实际上是通过调用GetEnumerator()方法返回了Ienumerable这个对象。既然我们不能明确的提供这样的实现,那么该由那个类实现IEnumerator的返回呢。本文将对此展开讨论并深入到Csharp2.0迭代器基本原理揭示这些神秘的东西。

注意:方法能对yield return关键字多次调用.实例如下:

using System; 
using System.Collections; 
public class Persons : IEnumerable 

    
string[] m_Names; 
    
public Persons(params string[] Names) 
    

        m_Names 
= new string[Names.Length]; 
        Names.CopyTo(m_Names,
0); 
    }
 

    
public IEnumerator GetEnumerator() 
    

        yield 
return "Michel"
        yield 
return "Chirstine"
        yield 
return "Mathieu"
        yield 
return "Julien"
    }
 
}
 
class Program 

    
static void Main(string[] args) 
    

        Persons arrPersons 
= new Persons("Michel","Christine","Mathieu","Julien"); 
        
foreach (string s in arrPersons) 
        

            Console.WriteLine(s); 
            Console.ReadLine(); 
        }
 
    }
 
}
 


这段程序将同样产生以下输出

       Michel
       Christine
       Mathieu 
      Julien

未完待续。。。。。
posted on 2005-03-29 22:29 Bluefee.Net 阅读(698) 评论(1)  编辑 收藏 所属分类: 翻译区

Feedback

#1楼  2005-03-30 10:45 kc [未注册用户]
嘿,要是把以前怎么实现贴上比较一下就好了
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-03-29 23:53 编辑过


相关链接: