Does VB.NET have anonymous functions?

佐手、 提交于 2019-11-27 15:59:58

问题


From what I can find on google, VB.NET only has one-statement lambdas, and not multi-statement anonymous functions. However, all the articles I read were talking about old versions of VB.NET, I couldn't find anything more recent than vs2008 beta 1 or 2.

So the question: How can I do this in VB.NET?

C# code:

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

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

回答1:


It does in 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



回答2:


Visual Basic .NET has only lambda expressions.

It does not support 'anonymous delegates" in the current version, though it will (and on multiple lines at that) in VS2010.

Right now the only option is to declare your method somewhere and pass it with the Addressof operator.




回答3:


VB9 has only single-line anonymous functions. We're adding full statement and multi-line lambdas in VB10.




回答4:


in this example I have a list of operations but only want to find one from a list (of T) where the IDs match:

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

operationID is a local variable passed in to the method and operations is a generic list.




回答5:


Anonymous isn't a delegate or function it's a strong dynamical type

you can use generic functions

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



回答6:


This is inaccurate. VB.NET does in fact have anonymous methods. Here is an example:

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)


来源:https://stackoverflow.com/questions/671631/does-vb-net-have-anonymous-functions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!