2010-02-13 67 views
2

什么发生在我的Intellisense上?LINQ intellisense停止工作

当我键入这样一行...

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

...我得到(几乎)没有智能感知,当我到了Select u.部分。只出现Equals,GetHashCode,GetType,ReferenceEquals和ToString。不是“UserName”和MembershipUser类的其他相关属性。代码编译和工作得很好。

有什么建议吗?

我试过devenv.exe /ResetSettings从VS命令提示符this question建议,但它没有帮助。

+0

如果有帮助,我的C#智能感知向来对这种古怪的顶部,但我不确定它是否归因于R eSharper干扰与否... – 2010-02-13 15:00:38

+0

不,不是在我的情况:resharper未安装... Membership14.0的 – 2010-02-13 15:04:17

回答

2

发生这种情况的原因是因为返回类型MemberShip.GetAllUsersMembershipUserCollection。此集合类型仅实现IEnumerable,且不是强类型。编译器只能推断集合中元素的类型为Object。因此,您在select子句中获得Object的智能感知。

您需要告诉编译器关于元素类型的更多信息。例如,如果你知道所有的值都MembershipUser情况下,您可以使用Cast功能告诉编译器

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

u在Membership.GetAllUsers()...应该也可以工作,并且看起来比.Cast语法更清晰。 – 2010-02-14 02:06:06

0

什么JaredPar告诉你是真的,因为集合不是IEnumerable,所以你必须告诉编译器,您的收藏

内,如果对象类型仍无法正常工作确保您导入的LINQ命名空间中的类 Import System.Linq :)