有没有办法让VS 2008 Intellisense在名称冲突时默认使用属性而不是类?
例如:
在我的范围内,我有一个属性Foo
,但我还使用了一个类Foo
。编写代码时,如果我开始输入Fo,VS2008 Intellisense会认为我指的是类Foo
。我希望它认为我指的是属性Foo
。
有没有办法让VS 2008 Intellisense在名称冲突时默认使用属性而不是类?
例如:
在我的范围内,我有一个属性Foo
,但我还使用了一个类Foo
。编写代码时,如果我开始输入Fo,VS2008 Intellisense会认为我指的是类Foo
。我希望它认为我指的是属性Foo
。
很遗憾,这是不可能的。优先级类别(如类/属性)的自定义不受支持。
在VS2010中甚至在ReSharper 5.0中都无法处理此问题。根据JetBrains的说法,它也不会成为ReSharper 6.0的功能。当属性开始让我感到烦躁并且完成大部分工作后,我会为该属性使用不同的名称,并进行重构。
更新:
我之前向JetBrains报告了这个问题,现在我收到了一封电子邮件,通知我该功能已经被添加,并将在Release 6.1中可用。所以对于ReSharper用户来说,这是一个好消息!
http://youtrack.jetbrains.net/issue/RSRP-273067?projectKey=RSRP
今天我也在想同样的事情。
虽然这个功能不在原版的VS中,但是通过修改一些代码来添加这个功能是完全可能的。例如,XAML Presenter(可能是以你需要修改的Presenter组件命名的)就做了类似的事情。XAML Presenter
它通过命名空间缩小范围并按属性类型排序。基本上,我只需要取出Intellisense Completion Source给出的列表并对其进行排序。听起来很简单。
更具挑战性的是实现UI控件。我讨厌设计UI控件……
编辑:
然而,我预见没有办法在不破坏Resharper的Intelllisense功能的情况下完成这个任务。
你是在用VS 2010吧?不过,我想象不出什么情况会让VS将类放在属性之上。
.
键时,它会自动完成类的完全限定名称,这意味着在不删除所有这些 VS 刚刚添加的垃圾(通过按 ctrl+z、然后 backspace、然后再按.
)之前,我就不能再使用该属性了。即使从“按下以下字符后确认”选项框中删除了.
,这种行为仍会发生。这个问题承认听起来很微小,直到它在一天内发生了 200 次。 - BlueRaja - Danny Pflughoeftusing FooClass = Foo;
如果您在实例成员内部,则可以将Foo属性称为this.Foo
。在类级别范围内,它必须是完全限定的。这就是为什么Microsoft的设计指南建议您不要将属性或方法命名为其返回类型相同的原因。 - Joseph YaduvanshiA
,然后使用向下箭头键选择命名空间而不是属性,然后键入。
。现在的方式,我必须这样做,但是对于属性来说,引用类内的属性比引用命名空间显着更常见,因此将命名空间设置为默认值只能被认为是一个错误。 - BlueRaja - Danny Pflughoeft