C#中的匿名函数

时间:2011-03-13 16:05:00

标签: c# vb.net anonymous-function c#-to-vb.net

以下语法是有效的VB.NET代码

Dim myCollection As New List(Of Stock)
myCollection.Add(New Stock(Guid.NewGuid, "Item1"))
myCollection.Add(New Stock(Guid.NewGuid, "Item2"))

Dim res As List(Of Stock) = myCollection.FindAll(Function(stock As Stock) As Boolean
                                                     If stock.Description = "Item2" Then
                                                         Return True
                                                     End If
                                                     Return False
                                                 End Function)

如何在C#中完成同样的事情?我试过......

myCollection.FindAll(bool delegate(Stock stock) {
                        if (blah blah) {
                        }
                     });

但是看起来我有点错误地构造它,因为我得到以下错误。 “错误1无效的表达术语'bool'”

3 个答案:

答案 0 :(得分:4)

您不需要bool关键字。返回类型是根据匿名函数中的代码自动确定的。另外,查看C#lambda表达式 - 它是同一个东西的简短形式,并且比传统的匿名方法更清晰。

lambda用法示例:

myCollection.FindAll(stock => stock.Description == "Item2");

答案 1 :(得分:4)

以下是使用lambda表达式的等效C#代码

myCollection.FindAll((stock) => stock.Description == "Item2");

使用匿名函数,上面将写如下

myCollection.FindAll(delegate(Stock stock) 
                     {
                       return stock.Description == "Item2";
                     });

您没有像在VB.NET中那样指定匿名函数的返回类型

答案 2 :(得分:2)

它可以转换为lambda表达式。

myCollection.FindAll(s => s.Description == "Item2");