VB.NET是否具有匿名功能?

时间:2009-03-22 21:20:00

标签: vb.net anonymous-methods

从我在谷歌上找到的,VB.NET只有一个语句lambdas,而不是多语句匿名函数。但是,我读到的所有文章都在谈论旧版本的VB.NET,我找不到比vs2008 beta 1或2更新的文章。

所以问题:如何在VB.NET中执行此操作?

C#代码:

private void HandleErrors( Action codeBlock ){
    try{
        codeBlock();
    }catch(Exception e){
        //log exception, etc
    }
}

HandleErrors(() => {
    var x = foo();
    x.DoStuff();
    etc
});

6 个答案:

答案 0 :(得分:28)

它在VB10中实现:

Dim food = New With {
    .ID = 1,
    .Name = "Carrot",
    .Type = (
        Function(name As String)
            If String.IsNullOrEmpty(name) Then Return String.Empty

            Select Case name.ToLower()
                Case "apple", "tomato": Return "Fruit"
                Case "potato": Return "Vegetable"
            End Select

            Return "Meat"
        End Function
    )(.Name)
}
Dim type = food.Type

答案 1 :(得分:18)

Visual Basic .NET只有lambda表达式。

它不支持当前版本中的“匿名委托”,尽管它会在VS2010中(以及在多行上)。

现在唯一的选择是在某处声明您的方法并使用Addressof运算符传递它。

答案 2 :(得分:9)

VB9只有单行匿名函数。我们在VB10中添加完整语句和多行lambdas。

答案 3 :(得分:0)

在这个例子中,我有一个操作列表,但只想从ID匹配的列表中找到一个:

Return operations.Find(Function(p) p.OperationID = operationID)

operationID是传递给方法的局部变量,操作是通用列表。

答案 4 :(得分:0)

匿名不是代表或功能 它是一个强大的动力类型

您可以使用通用功能

Sub Main()
      Dim PersonDynamicType = AnonyFunc(New With {.Name = "david", .Family = "Fisher"})
      Console.Write(PersonDynamicType.Name)
End Sub

Function AnonyFunc(Of t)(v As t) As t
      Return v
End Function

答案 5 :(得分:-4)

这是不准确的。 VB.NET确实有匿名方法。这是一个例子:

Private Function JsonToObject(Of T)(Value As String) As T
    Dim JavaScriptSerializer As New System.Web.Script.Serialization.JavaScriptSerializer()
    Return JavaScriptSerializer.Deserialize(Of T)(Value)
End Function

Dim People As Generic.List(Of Person) = JsonToObject(Of Generic.List(Of Person))(Json)