2009-12-14 77 views
0

是否有可能將以下函數縮短爲lambda表達式?Lambda教程和解決Lambda函數

或者(自己動手)對於vb.net中lambda的初學者教程,最好的和最容易理解的是什麼?

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

您可以創建一個lambda表達式這需要一個字符串數組並返回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

試試這個:

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