c#发展

注册

 

发新话题 回复该主题

C知识回顾Lambda [复制链接]

1#
北京治疗白癜风费用         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

分享 转发
TOP
发新话题 回复该主题