但是它已经不再需要一个在关联到委托之前就明确创建的方法了

时间:2021-09-25 09:05:56

首先,C#中的匿名要领是在C#2.0引入的,它终结了C#2.0之前版本声明委托的独一要领是使用定名要领的时代。虽然在 C# 3.0 及更高版本中,Lambda 表达式代替了匿名要领,作为编写内联代码的首选方法。但是,匿名要领的信息同样也适用于 Lambda 表达式,可以说 Lambda 表达式就是匿名要领演变过来的。

我们可以使用匿名要领来忽略参数列表。 这意味着匿名要领可转换为具有各类签名的委托,而这对付 Lambda 表达式来说是不成能的。 学好匿名要领,才华越发深刻地舆解好 Lambda 表达式。

在说匿名要领的使用之前,先来说说匿名要领的其他叫法。匿名要领也有人叫匿名委托、匿名函数,虽然此刻遍及通用,但是还是有点区另外。msdn官网上说:要将代码块通报为委托参数,创建匿名要领例是独一的要领。这里的匿名要领就是官方的说法,而因为匿名要领就是为了将代码块通报为委托参数,因此也有人叫匿名委托,包孕笔者也喜欢这种称号,我感受这样叫通俗易懂。至于匿名函数,因为C#中“要领”(Method)的观点有些语言叫“函数”(Function),因此匿名要领也被人叫做匿名函数。然而在msdn文档介绍中匿名函数包孕了Lambda 表达式和匿名要领,可以说匿名函数是更高的一级,所以说最官方的叫法还是匿名要领,固然其他的叫法传布也甚广,听得懂就行了,没须要纠结。

接下来说说匿名要领的写规则则,先上例子:

delegate(int i) { return i > 0; }

它遵循这样的格局书写:

delegate(形参表){要领体代码}

可以类比js中匿名函数的写法来记忆。

那么匿名要领运用在哪里呢?怎么使用呢?当你需要一个姑且要领,该要领使用次数极少或者你需要的这个要领的代码很简短,那么你就可以使用匿名要领。给个简单的例子,如果需要在一个整型调集中筛选出切合条件的新调集,如下

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 }; //假设需要从list调集中获取大于3的所有元素以新调集返回 var newlist = newlist.FindAll(GetNewList);

GetNewList()为此外界说的和委托Predicate<T>具有同签名的要领(Predicate<T>是系统内置委托)

GetNewList()界说如下:

bool GetNewList(int i) { return i > 3; }

以上是没有使用匿名要领时的写法,,如果使用了匿名要领,你就会发明一切变得如此简便,

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 }; var newlist = list.FindAll(delegate(int i) { return i > 3; });

通过比拟,可以发明使用匿名要领能够供给与先前定名要领不异的成果,但是它已经不再需要一个在关联到委托之前就明确创建的要领了,因此也减少了实例化委托所需的编码系统开销,这就是它的最大好处。