Поддерживает ли VB.NET и Visual Studio 2010 многострочный анонимный метод? - PullRequest
4 голосов
/ 05 октября 2010

Я обнаружил, что этот ответ спрашивали и отвечали до фактического выпуска VS2010.

Говорят, что

VB9 имеет только однострочные анонимные функции,Мы добавляем полный оператор и многострочные лямбды в VB10.

Но я попытался добавить этот код

 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)
 )

в проект .NET Framework 4.0 в Visual Studio 2010и он не компилируется.

А теперь, если эта функция действительно реализована и что я делаю неправильно?

Ответы [ 3 ]

12 голосов
/ 05 октября 2010

Я полагаю, что вам не хватает только строки '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 голосов
/ 05 октября 2010

Вам не хватает 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

Эта функция описана здесь:

2 голосов
/ 23 мая 2011

Вот кое-что, что вы можете найти полезным.Обратите внимание, как объявленный метод вызывается мгновенно.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...