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();
}
使用迭代器的好处是延迟加栽,当你需要迭代器里的数据时,才会调用访问迭代器.