2010-02-13 3 views
2

Что случилось с моей Intellisense ??LINQ intellisense перестала работать

Когда я типа линии, как это ...

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

... Я не получаю (почти) не Intellisense, когда я добираюсь до Select u. части. Появляются только Equals, GetHashCode, GetType, ReferenceEquals и ToString. Не «UserName» и другие соответствующие пропозиции класса MembershipUser.
Код компилируется и работает отлично.

Любые предложения?

Я попробовал devenv.exe /ResetSettings из командной строки VS, как предложено в this question, но это не помогло.

+0

Если это помогает, мои C# IntelliSense всегда были дурацкими на это, но я не уверен, что это связано с R eSharper вмешивается или нет ... –

+0

Нет, не в моем случае: Resharper не установлен ... –

ответ

2

Причина, по которой это происходит, заключается в том, что возвращаемый тип MemberShip.GetAllUsers равен MembershipUserCollection. Этот тип коллекции реализует только IEnumerable и не является сильно типом. Компилятор может только указать тип элементов в коллекции: Object. Следовательно, вы получаете intellisense для Object в предложении select.

Вам нужно сообщить компилятору больше информации о типе элементов. Например, если вы знаете, все значения являются MembershipUser экземпляры можно использовать функцию Cast, чтобы сообщить компилятору

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

from MembershipUser u в Membership.GetAllUsers() ... также должен работать и выглядит довольно чище, чем синтаксис .Cast. –

0

Что JaredPar сказал вам это правда, потому что коллекция не IEnumerable так что вы должны сказать компилятору, который тип объекта внутри вашей коллекции

И если это все еще не работает, убедитесь, что вы импортировали пространство имен Linq в верхней части класса Import System.Linq :)

Смежные вопросы