Лямбда-учебник и решение лямбда-функции - PullRequest
0 голосов
/ 14 декабря 2009

Можно ли сократить следующую функцию до лямбда-выражения?

Или (чтобы справиться самому), что является лучшим и наиболее понятным учебником для начинающих по лямбде в vb.net?

Function getit(ByVal wert As Integer, ByVal sk As Integer, ByVal list As List(Of Array)) As String
    Dim ergebnis As String
    ergebnis = "Null"
    For Each strg As String() In list
        If wert >= Integer.Parse(strg(0)) And wert < Integer.Parse(strg(0)) + 5 And sk = Integer.Parse(strg(1)) Then
            Return strg(2)
        End If
    Next
    Return ergebnis
End Function

Ответы [ 2 ]

2 голосов
/ 14 декабря 2009

Вы можете создать лямбда-выражение, которое принимает строковый массив и возвращает True, если оно удовлетворяет условию:

Dim isValidArray = Function(strg as String()) _
                     wert >= Integer.Parse(strg(0)) AndAlso _
                     wert < Integer.Parse(strg(0)) + 5 AndAlso _
                     sk = Integer.Parse(strg(1))

Я бы также изменил сигнатуру вашего метода, чтобы принимать список строкового массива вместо списка какого-либо массива. Окончательный код будет:

Function getit(ByVal wert As Integer, ByVal sk As Integer, _
               ByVal list As List(Of String())) As String

    ''//Insert above lambda here

    ''//Get first valid item or default (Nothing) if no valid item
    Dim validArray As String() = list.FirstOrDefault(isValidArray)

    If validArray IsNot Nothing
        Return validArray(2)
    Else
        Return "Null"
    End If
End Function
1 голос
/ 14 декабря 2009

Попробуйте:

Dim getit As String;

getit = (From x In list
         Where (wert >= Integer.Parse(x(0))) AndAlso (wert < Integer.Parse(x(0)) + 5) AndAlso (sk = Integer.Parse(x(1)))
         Select x(2)).Union(Of String)(New List(Of String) { "Null" }).First(Of String)()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...