2011-03-09 32 views
3

在VB.Net中使用lambda的結果沒有智能感知。這是VS2010的錯誤還是預期?請注意,在C#VB.Net沒有智能感知的Lambda表達式

Return Array.TrueForAll(chequeColl, Function(x) x.Number <> "N") 'No intellisense Number does not appear 


Return Array.TrueForAll(chequeColl, Function(x As MyClass) x.Number <> "N") 'Now casted intellisense appears 

更新工作正常:這裏有一個例子

Public Class Cheque 

    Public Property Id As String 
    Public Property Status As Byte 
    Public Property Amount As String 
    Public Property Number As String 

End Class 


Public Class ChequeCollection 

    Private chequeColl() As Cheque 

    Public Sub DoStuff() 
     Array.TrueForAll(chequeColl, Function(x As Cheque) x.Number = 1) 'x has to be cast as cheque for intellisense to appear 
    End Sub 

End Class 
+2

您通常會在VB.Net中使用lambdas獲得智能感知。你可以發佈'chequeColl'的聲明嗎? – MarkJ 2011-03-09 14:58:05

+0

它是一個簡單的類對象數組 – Jon 2011-03-09 15:14:36

+0

@Jon它們是什麼樣的'Objects'?如果他們不是MyClass,那麼這就是爲什麼你沒有獲得智能感知。 – msarchet 2011-03-09 15:24:11

回答

1

對象的數組不是強類型像一個List(Of T)類會。所以當你輸入'x'時並期望'數字'在Intellisese中出現,但它不會。運行時不知道該數組中的對象類型。

如果您選擇這樣做,您可以使用LINQ將該數組轉換爲一個強大的對象集合,那麼然後將顯示Intellisense。該follwing線應能正常工作:

暗淡ChequeList =(從c在MyArrayOfObjects選擇C).ToList()

另外一兩件事來檢查VB.NET VS C#智能感知。 '選項推斷'必須打開'開'。這默認,但不升級項目(即從05升級 - > 08 - > 10)

爲什麼我的lambda函數拋出一個錯誤,在運行時一個System.MissingMemberException異常?
http://allen-conway-dotnet.blogspot.com/2010/09/why-are-my-lambda-functions-throwing.html