2010-02-13 3 views
2

Qu'est-ce qui s'est passé à mon Intellisense ??LINQ intellisense cessé de fonctionner

Lorsque je tape une ligne comme ça ...

Dim users = (From u In Membership.GetAllUsers Select u.UserName) 

... Je reçois (presque) pas IntelliSense quand je rentre à la partie Select u.. Seuls Equals, GetHashCode, GetType, ReferenceEquals et ToString apparaissent. Pas "UserName" et les autres propriétés pertinentes de la classe MembershipUser.
Le code compile et fonctionne très bien.

Des suggestions?

J'ai essayé devenv.exe /ResetSettings à partir de l'invite de commande VS comme suggéré dans this question, mais cela n'a pas aidé.

+0

Si elle aide, mon C# IntelliSense a toujours été loufoque à ce sujet, mais je ne suis pas sûr si c'est à cause de R eSharper interférant ou pas ... –

+0

Non, pas dans mon cas: Resharper n'est pas installé ... –

Répondre

2

La raison pour laquelle cela se produit est que le type de retour de MemberShip.GetAllUsers est MembershipUserCollection. Ce type de collection implémente uniquement IEnumerable et n'est pas fortement typé. Le compilateur peut seulement déduire le type des éléments de la collection est Object. Par conséquent, vous obtenez intellisense pour Object dans la clause select.

Vous devez indiquer au compilateur plus d'informations sur le type des éléments. Par exemple, si vous connaissez toutes les valeurs sont MembershipUser cas, vous pouvez utiliser la fonction CAST pour indiquer au compilateur

From u in Membership.GetAllUsers().Cast(Of MembershipUser) ... 
+0

de MembershipUser u dans Membership.GetAllUsers() ... devrait également fonctionner, et semble plutôt propre que la syntaxe .Cast. –

0

Qu'est-ce JaredPar vous a dit est vrai, parce que cette collection ne IEnumerable donc vous devez dire au compilateur type d'objet dans votre collection

Et si cela ne fonctionne toujours pas être sûr que vous avez importé l'espace de noms LINQ dans la partie supérieure de la classe Import System.Linq :)

Questions connexes