当前位置: 首页 > 编程语言 > C#

lambda表达式和方法组的区别分享

时间:2023-04-10 11:21:13 C#

lambda表达式和方法组有什么区别Class1.Method1("cId",Facade.Customers.GetSingle);和Class1.Method1("cId",x=>Facade.Customers.GetSingle(x));?Resharper建议使用第一个表达式。结果没有任何区别。但是,第二个创建额外的重定向:代码将首先调用您的匿名方法,获取名为x的参数,然后使用该参数调用Facade.Customers.GetSingle。这种重定向一点用处都没有,这就是为什么ReSharper告诉您使用第一种选择。在幕后,如果您使用lambda表达式,编译器会生成更多代码。对于方法组,它只是创建一个指向该方法的新委托:L_0001:ldstr"cId"L_0006:ldnullL_0007:ldftnvoidFacade/Customers::GetSingle(valuetype[mscorlib]System.Guid)L_000d:newobjinstancevoid[mscorlib]System.Action`1::.ctor(object,nativeint)L_0012:callvoidClass1::Method1(string,class[mscorlib]System.Action`1)使用lambda表达式,在类上创建一个匿名方法(b__0b__0onb__0),委托引用它:L_0018:ldstr"cId"L_001d:ldsfldclass[mscorlib]System.Action`1Class1::CS$9__CachedAnonymousMethodDelegate1L_0022:brtrue.sL_0037L_0024:ldnullL_0025:ldftnvoidClass1::b__0(valuetype[mscorlib]System.Guid)L_002b:newobj实例void[mscorlib]System.Action`1::.ctor(object,nativeint)L_0030:stsfld类[mscorlib]System.Action`1Class1::CS$9__CachedAnonymousMethodDelegate1L_0035:br.sL_0037L_0037:ldsfldclass[mscorlib]System.Action`1Class1::CS$9__CachedAnonymousMethodDelegate1L_003c:callvoidClass1::Method1(string,class[mscorlib]System.Action`1)你的方法在哪里接受一个Func参数,Func等同于同义词:公共委托BECustomerFunc(Guidarg);事实上,所有的Func都是一个泛型委托:publicdelegateTResultFunc(Targ);编译器可以分析你的代码并确定你的Func与Facade.Customers.GetSingle方法组是兼容的,因为方法签名与委托签名相匹配。这是语法糖,是编译器为你做繁重工作的另一个例子。以上就是C#学习教程的全部内容:lambda表达式和方法组的区别。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: