代码之家  ›  专栏  ›  技术社区  ›  Drake

vb.net和Visual Studio 2010是否支持多行匿名方法?

  •  4
  • Drake  · 技术社区  · 14 年前

    我发现 this answer 在VS2010实际发布之前被询问和回答。

    他们说

    VB9只有单行匿名 功能。我们正在添加完整的语句 以及VB10中的多行lambdas。

    但是我试图添加这个代码

     Dim test2 = Function(t1 As T, t2 As T) (
     Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
     Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
     Return val1.CompareTo(val2)
     )
    

    到Visual Studio 2010中的.NET Framework 4.0项目,但它不编译。

    如果这个特性真的被实现了,我做错了什么,现在你会这样做吗?

    3 回复  |  直到 11 年前
        1
  •  12
  •   diceguyd30    14 年前

    我相信你只是错过了你的“结束功能”行。试试这个:

     Dim test2 = (Function(t1 As T, t2 As T)
     Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
     Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
     Return val1.CompareTo(val2)
     End Function)
    
        2
  •  3
  •   Heinzi    11 年前

    你失踪了 End Function 您试图将函数体括在括号中,这是错误的。这应该有效:

    Dim test2 = Function(t1 As T, t2 As T)
        Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
        Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
        Return val1.CompareTo(val2)
    End Function
    

    此功能记录在这里:

        3
  •  2
  •   Sam    14 年前

    这是一些你可能会发现有用的东西。注意声明的方法是如何被即时调用的。

    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