北京治疗白癜风费用 http://www.bdfyy999.com/index.html(点击上方蓝字,可快速
()=tru;
x=x==1;
(x)=x==1;
(x,y)=x==y;
当lambda表达式有且只有一个输入参数的时侯,括号(“()”)才是可选的。括号内存在多个输入参数时使用“,”进行分割。
你也可以选择显式指定类型,一般只有在编译器难以或无法准确推断输入类型的时候。
Funcint,int,boolfunc=(intx,inty)=x==y;
这里使用空括号(“()”)指定零个输入参数,并且可以在Lambda的主体包含一个或多个方法进行调用。
()=YourMthod()
Lambda语句
lambda语句和上面的lambda表达式相比,只是多了个大括号(“{}”)。
基本形式:(输入参数)={表达式}。
lambda语句的主体可以由任意数量的普通语句组成,不过,我们一般写的语句不多(三个左右吧)。
dlgatvoidMyDl(strings);
//...
MyDlmyDl=n={vars=n+"Fanguzai!";Consol.WritLin(s);};
myDl("Hi,");
异步Lambda
通过async和await关键字,我们可以很简单并快速的创建包含异步处理的lambda表达式和语句。博主发表了约8篇关于异步的文章,你可以点击进入目录。
这里,我使用简单的异步调用方式,编写执行按钮触发的点击事件,即调用异步方法DoAsync。
publicpartialclassForm1:Form
{
publicForm1()
{
InitializComponnt();
}
privatasyncvoidbutton1_Click(objctsndr,EvntArgs)
{
awaitDoAsync();
}
asyncTaskDoAsync()
{
awaitTask.Dlay();
}
}
现在,简化上面的的Click事件,并加上async。
publicpartialclassForm1:Form
{
publicForm1()
{
InitializComponnt();
button1.Click+=async(sndr,)=
{
awaitDoAsync();
};
}
asyncTaskDoAsync()
{
awaitTask.Dlay();
}
}
在LINQ中使用Lambda
许多LINQ中的参数都是一种委托类型的参数,如FuncT,?TRsult,可以定义输入参数以及返回类型。博主也发表了多篇关于LINQ的文章,你也可以点击进入目录。
publicdlgatTRsultFuncTArg0,TRsult(TArg0arg0)
Funcint,bool表示:int为输入参数,bool为返回值。
Funcint,int,bool表示:2个int为输入参数,一个bool为返回值。
示例:
Funcint,boolmyFunc=x=x==;
varrsult=myFunc();
C#的编译器可以自动推断输入参数的类型,即便是多个输入参数,当然,你也可以选择显式指定。
varnums=nw[]{2,5,0};
varqury=nums.Count(x=x2);
varqury2=nums.Countint(x=x2);
不要将=和=搞错了,前者是Lambda运算符,后者是算术比较运算符。
Lambda中的类型推断
编译器会根据Lambda主体、参数的委托类型以及C#语言规范和其它等一些因素,对我们所写的Lambda进行类型推断。
在这里,由于源数据是一个int数组,即我要查的数据为IEnumrablint类型,编译器在这里自动推断元素为int类型,意味着Count方法内的x你可以通过“.”在VS中显示对应int类型的属性和方法。
Lambda中的变量使用范围
我们可以在Lambda的主体中引用范围之外的变量。如:
varnums=nw[]{2,5,0};//int[]类型
var