2011-03-09 3 views
3

L'utilisation de lambda dans VB.Net n'entraîne aucune intuition. Est-ce un bug avec VS2010 ou prévu? Notez que cela fonctionne bien en C#VB.Net Expression Lambda sans intellisense

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 

MISE À JOUR: classe Voici un exemple

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

Vous obtenez généralement intellisense avec lambdas dans VB.Net. Pouvez-vous poster la déclaration de 'chequeColl' s'il vous plait? – MarkJ

+0

C'est un simple tableau d'objets de classe – Jon

+0

@Jon quel genre d'objets sont-ils? S'ils ne sont pas MyClass alors c'est pourquoi vous n'obtenez pas l'intellisense. – msarchet

Répondre

1

Un tableau d'objet n'est pas fortement typé comme une liste (Of T) serait. Donc, quand vous tapez 'x'. et attendez que 'Number' apparaisse dans Intellisese, ce ne sera pas le cas. Le moteur d'exécution n'a aucune idée des types d'objets dans ce tableau.

Si vous choisissez de le faire, vous pouvez utiliser LINQ pour convertir ce tableau en une collection d'objets fortement tped, qui puis vous montrer l'Intellisense. La ligne follwing devrait fonctionner correctement:

Dim ChequeList = (A partir de Dans MyArrayOfObjects Select c) .ToList()

également une autre chose à vérifier la VB.NET vs C# IntelliSense. 'Option Infer' doit être activé. Il est par défaut, mais pas pour les projets mis à niveau (à savoir mise à niveau de 05 -> 08 -> 10)

Pourquoi mes fonctions Lambda Lancer une erreur lors de l'exécution avec une exception System.MissingMemberException?
http://allen-conway-dotnet.blogspot.com/2010/09/why-are-my-lambda-functions-throwing.html