Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VB.Net Lambda expression with no intellisense

Using lambda's in VB.Net results in no intellisense. Is this a bug with VS2010 or expected? Note that it works fine in C#

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

UPDATE: Here's an example

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
like image 293
Jon Avatar asked Jun 28 '26 14:06

Jon


1 Answers

An array of object is not strongly typed like a List(Of T) class would be. So when you type 'x.' and expect 'Number' to show up in Intellisese, it will not. The runtime has no idea of the object types within that Array.

If you chose to do so, you could use LINQ to convert that Array into a stongly tped object collection, that would then show you the Intellisense. The follwing line should work properly:

Dim ChequeList = (From c In MyArrayOfObjects Select c).ToList()

Also one other thing to check for the VB.NET vs C# intellisense. 'Option Infer' must be turned 'On'. It is by default, but not for upgraded projects (i.e. upgraded from 05 -> 08 -> 10)

Why Are My Lambda Functions Throwing An Error at Run Time With a System.MissingMemberException Exception?
http://allen-conway-dotnet.blogspot.com/2010/09/why-are-my-lambda-functions-throwing.html

like image 110
atconway Avatar answered Jul 01 '26 04:07

atconway



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!