超越期望
海滨的小屋

1.匿名方法

常用的事件处理方法.

this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
private void btnRefresh_Click(object sender, EventArgs e)
{
    BindData();
}

 

采用匿名方法处理.

this.btnRefresh.Click += delegate(object sender, EventArgs e) { BindData(); };

 

在方法里调用匿名方法.

List<Book> books = new List<Book>();

books.Find(

delegate(Book book)

{

     return book.Price < 50;

});

 

一个匿名方法就是一个delegate现在我们使用委托也能简单的将方法作为参数传递了,还可以层层嵌套,都是很简单的事情了。

 

2.Lambda表达式和匿名方法比较

x => x+1 
deleage(int x){return x+1;}
//后面跟着的是语句块
x=>{return x+1;}
delegate(int x){return x+1;}
//输入参数也可以带类型,带类型后别忘记小括号哦
(int x) => x+1
delegate(int x){return x+1;}
//也可以多个输入参数,逗号分隔,别忘记小括号
(x,y) => x+y
delegate(int x,int y){return x+y;}
//无参的也行

() => 1

delegate(){return 1;}

 

3.迭代器

yiled return;把控制权从yield所在程序交给调用的程序,等调用完了,控制权在回去

yiled break; 把控制权从yield所在程序交给调用的程序,控制权不返回

 

未使用:

static IEnumerable<int> WithNoYield()
        {
            IList
<int> list = new List<int>();
            
for (int i = 0; i < 20; i++)
            {
                Console.WriteLine(i.ToString());
                
if(i > 2)
                    list.Add(i);
            }
            
return list;
        }

 

使用:

static IEnumerable<int> WithYield()
        {
            
for (int i = 0; i < 20; i++)
            {
                Console.WriteLine(i.ToString());
                
if(i > 2)
                    
yield return i;
            }
        }

 

static void Main()
        {
            
foreach (int i in WithYield())
            {
                Console.WriteLine(i.ToString());
            }
            Console.ReadLine();
        }

使用迭代器的好处是延迟加栽,当你需要迭代器里的数据时,才会调用访问迭代器.

 

 

posted on 2008-07-22 11:14  Savior(海滨)  阅读(146)  评论(0编辑  收藏  举报