Visual Studio 2008智能感知优先级设置

10

有没有办法让VS 2008 Intellisense在名称冲突时默认使用属性而不是类?

例如:

在我的范围内,我有一个属性Foo,但我还使用了一个类Foo。编写代码时,如果我开始输入Fo,VS2008 Intellisense会认为我指的是类Foo。我希望它认为我指的是属性Foo


1
今天最让我烦恼的问题有 100 积分赏金。因为当我有一个与类名相同的属性时,优先级顺序是错误的,当我键入它并按 . 键时,它会自动完成类的完全限定名称,这意味着在不删除所有这些 VS 刚刚添加的垃圾(通过按 ctrl+z、然后 backspace、然后再按 .)之前,我就不能再使用该属性了。即使从“按下以下字符后确认”选项框中删除了 .,这种行为仍会发生。这个问题承认听起来很微小,直到它在一天内发生了 200 次。 - BlueRaja - Danny Pflughoeft
2
(在C#中)您可以为类设置别名:using FooClass = Foo; 如果您在实例成员内部,则可以将Foo属性称为this.Foo。在类级别范围内,它必须是完全限定的。这就是为什么Microsoft的设计指南建议您不要将属性或方法命名为其返回类型相同的原因。 - Joseph Yaduvanshi
@Jim:嗯,不,他们可以键入A,然后使用向下箭头键选择命名空间而不是属性,然后键入。现在的方式,我必须这样做,但是对于属性来说,引用类内的属性比引用命名空间显着更常见,因此将命名空间设置为默认值只能被认为是一个错误。 - BlueRaja - Danny Pflughoeft
我了解你在说什么。但是,打破自上而下的类型发现方法,为了根据作用域进行代码辅助可能会令人困惑。你尝试过像CodeRush或Resharper这样的生产力插件吗?它们可以覆盖Intellisense中的默认设置。例如,Resharper有一个智能代码完成选项(CTRL+SHIFT+SPACE)。 - Joseph Yaduvanshi
@Jim:我使用Resharper,但它并没有解决这个问题。问题在于,当我在屏幕上输入我想要的内容时,VS会自动添加代码,这显然不是我想要的。即使我已经禁用了自动完成,但是当我按下“.”时,智能感知仍然会自动选择。我不明白为什么会这样。 - BlueRaja - Danny Pflughoeft
显示剩余4条评论
4个回答

3

很遗憾,这是不可能的。优先级类别(如类/属性)的自定义不受支持。


1

在VS2010中甚至在ReSharper 5.0中都无法处理此问题。根据JetBrains的说法,它也不会成为ReSharper 6.0的功能。当属性开始让我感到烦躁并且完成大部分工作后,我会为该属性使用不同的名称,并进行重构。

更新:

我之前向JetBrains报告了这个问题,现在我收到了一封电子邮件,通知我该功能已经被添加,并将在Release 6.1中可用。所以对于ReSharper用户来说,这是一个好消息!

http://youtrack.jetbrains.net/issue/RSRP-273067?projectKey=RSRP


+1 建议进行可怕的重构。我会避免在第一次使用属性和类时使用相同的名称。 - WEFX

0

今天我也在想同样的事情。

虽然这个功能不在原版的VS中,但是通过修改一些代码来添加这个功能是完全可能的。例如,XAML Presenter(可能是以你需要修改的Presenter组件命名的)就做了类似的事情。XAML Presenter

它通过命名空间缩小范围并按属性类型排序。基本上,我只需要取出Intellisense Completion Source给出的列表并对其进行排序。听起来很简单。

更具挑战性的是实现UI控件。我讨厌设计UI控件……

编辑:

然而,我预见没有办法在不破坏Resharper的Intelllisense功能的情况下完成这个任务。


0

你是在用VS 2010吧?不过,我想象不出什么情况会让VS将类放在属性之上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接