C#3.0新特性体验之Lambda表达式
# 2.0引入了一个新特性——匿名方法,它允许开发人员在不使用委托函数的情况下内联声明他们的函数代码。# 3.0提供了一个新特性——Lambda表达式,它提供了一个更简洁的格式来完成同样的目标。在讨论Lambda表达式之前,让我们仔细看看匿名方法。
匿名方法
假设您需要创建一个按钮,以便在单击它时更新列表框的内容。在C#1.0和1.1中,您必须这样做:
public my form()
{
listBox = new listBox(...);
textBox =新文本框(...);
addButton =新建按钮(...);
添加按钮。click+= new EventHandler(add click);
}
void AddClick(对象发送方,EventArgs e)
{
listBox。Items.Add(文本框。正文);
}
在C#2.0中,您需要这样做:
public my form()
{
listBox = new listBox(...);
textBox =新文本框(...);
addButton =新建按钮(...);
添加按钮。单击+=委托
{
列表框。Items.Add(文本框。正文);
};
如您所见,您不必声明一个新方法来将其连接到事件。你可以在C#2.0中使用匿名方法来做同样的工作。# 3.0引入了一个更简单的格式,Lambda表达式。你可以直接用“= >”来写你的表达式列表,后面跟着一个表达式或者语句块。
λ表达式中的参数
Lambda表达式中的参数可以是显式或隐式类型。在显式类型参数列表中,显式指定每个表达式的类型。在隐式类型参数列表中,类型是由上下文推断的:
(int x) => x+1 //显式类型参数
(y,z) = >返回y * z;//隐式类型参数
λ演算的例子
下面的例子展示了两种不同的方法来打印出一个列表中长度相等的字符串。第一种方法AnonMethod使用匿名方法,而第二个LambdaExample通过Lambda演算实现:
//program . cs
使用System
使用系统。集合。泛型;
使用系统。文本;
使用系统。查询;
使用系统。XML . XLinq
使用系统。Data . DLinq
namespace lambda example
{
公共委托bool KeyValueFilter(K key,V value);
静态类程序
{
static void Main(string[]args)
{
List List = new List();
列表。add(" AA ");
列表。add(" ABC ");
列表。添加(“DEFG”);
列表。添加(“XYZ”);
控制台。WriteLine(“通过匿名方法”);
anon method(list);
控制台。WriteLine("通过Lambda表达式");
lambda example(list);
Dictionary var ways = new Dictionary();
变装。补充(“牛仔裤”,20);
varways。添加(“衬衫”,15);
varways。补充(“睡衣”,9);
varways。添加(“鞋子”,9);
var clotheslistreast = var ways。FilterBy((string name,
int count)= > name = = " Shoes " & & count < 10);
//多个参数的示例
if(clotheslist荒。Count > 0)
控制台。WriteLine(“我们缺鞋”);
控制台。ReadLine();
}
static void anon method(List List)
{
List even numbers = List。find all(delegate(string I)
{ return(I . Length % 2)= = 0;});
foreach(even numbers中的字符串even number)
{
控制台。WriteLine(even number);
}
}
静态void lambda example(List List)
{
var even numbers = List。find all(I = >(I . Length % 2)= = 0);//单参数示例
foreach(even numbers中的字符串I)
{
Console。WriteLine(I);
}
}
}
public static class Extensions
{
public static Dictionary filter by
(this Dictionary items,key value filter filter)
{
var result = new Dictionary();
foreach(items中的KeyValuePair元素)
{
if (filter(element。关键,元素。Value))
结果。添加(元素。关键,元素。值);
}
返回结果;
}
}
}
如果安装了Visual Studio 2005和LinQ Preview,可以使用编辑器编译程序。如果没有,您可以使用命令行方法:
C:\Program Files\LINQ预览\ Bin \ CSC . exe
/reference:" C:\ Program Files \ LINQ预览\Bin\System。data . dlinq . dll "
/reference:C:\ Windows \ Microsoft . net \ Framework \ v 2 . 0 . 50727 \ System。data . dll
/reference:C:\ WINDOWS \ Microsoft。NET \ Framework \ v 2 . 0 . 50727 \ System . dll
/reference:" C:\ Program Files \ LINQ预览\Bin\System。query . dll " "/br/]/reference:C:\ WINDOWS \ Microsoft。NET \ Framework \ v 2 . 0 . 50727 \ System。XML . dll
/reference:" C:\ Program Files \ LINQ预览\Bin\System。XML . xlinq . dll "
/target:exe program . cs
0条评论