C# 使用ReSharper和新的XYZ()intellisense自动完成

C# 使用ReSharper和新的XYZ()intellisense自动完成,c#,visual-studio-2008,resharper,C#,Visual Studio 2008,Resharper,我对新安装的Visual Studio 2008(新pc)和ReSharper 4.5有问题 编辑:在以下位置打开的问题: 我有以下代码: public static TValue GetOrCreate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key) where TValue: new() { #region Parameter Validation if

我对新安装的Visual Studio 2008(新pc)和ReSharper 4.5有问题

编辑:在以下位置打开的问题:


我有以下代码:

public static TValue GetOrCreate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key)
    where TValue: new()
{
    #region Parameter Validation

    if (ReferenceEquals(null, key))
        throw new ArgumentNullException("key");

    #endregion

    TValue result;
    if (dictionary.TryGetValue(key, out result))
        return result;

    result = new <-- problem here
    dictionary.Add(key, result);
    return result;
}
然后我得到一个智能感知下拉列表,里面有TValue,它被选中了

无论我现在输入什么,我最终得到的是:

result = new _  (|);
再次标记光标位置。这里有几个问题:

  • 无论我键入什么,都会在下划线后插入制表符,而不是像上面那样插入两个空格
  • 我已经关闭了在完成时添加括号和方括号的功能,但它们仍然是为这个特定的构造添加的
  • 似乎不可能让ReSharper插入所选的类型,它只是添加了一个下划线(不,下划线不是我说的“类型到此为止”的方式,它完全扩展到我上面显示的内容,没有类型,而是使用下划线+制表符)
  • 当智能感知启动时,我尝试按下的键:

    • 空格(区别:括号如下:(|),即添加空格)
    • 标签
    • 进入
    • (-即左括号)
    • T+以上任何一项(即,键入TValue的第一个字母,并希望这有帮助,但它没有)
    唯一的“帮助”是,如果我点击其中一个键,切换到更完整的intellisense下拉列表,比如默认的Alt-Right,那么它只会添加更多我可以选择的内容,仍然选择了TValue,但是现在如果我点击Enter或Tab,代码会正确展开

    有人知道我需要调整什么吗


    编辑:在我发布之前,我考虑了这个方法,并决定那里的参数验证可能不需要,所以我把它拿走了,瞧,现在它自动正确完成了

    这只是ReSharper中的一个(另一个)bug吗

    请注意,如果我在该行正确地编写代码,即编写TValue而不是下划线,则项目将生成



    编辑:注意,ReSharper中没有启用的活动模板,这是我禁用的第一件事,只是为了测试是否有一个奇怪的模板覆盖了我的选择。

    我可以确认这种行为。我得到了完全相同的结果

    对我来说,输入两个字符“TV”很有帮助,然后intellisence(制表符或Ctrl+Space)将扩展到TValue(|)。 但是,当我在“TV”上直接输入“new”和“new”时,它不起作用。在“new”之后,我必须按Esc键……这确实是一种奇怪的行为


    更新:导致此问题的是区域…删除区域(仅两个#region关键字-而不是if子句)帮助我。

    从1.5版开始,我就是一个ReSharper用户,我注意到了一个特定的模式。首先,他们支持C#的功能,然后他们支持得相当好,然后他们支持得很好,除了边缘情况,最后他们支持得很好,除了罕见的bug

    对于泛型,他们处于第2步,或者可能是第3步。他们已经到了这样一个地步,即他们知道
    GetOrCreate
    内部的
    TValue
    是一个类型参数,他们甚至现在知道它有一个
    new()
    约束,因此应该被认为是一个在“new”之后就完成了的具有构造函数的类型.但他们似乎有一个小缺陷,实际上使功能工作顺利


    请向他们报告,这样他们就可以进入第4步,希望在C#4.0发布之前,协方差和逆变将他们送回第2步。

    如果我键入整个内容,只要输入“smart”就行了ReSharper intellisense下拉列表正在使用中,它无法按预期工作。我将向JetBrains发送错误报告。我已向他们发布了一个问题,我将报告我的发现。因为我想知道是否只有我一个人,我将标记您的答复为已接受的答案,因为您确认了我的怀疑,这可能是某种错误。您是sor关于区域,删除它会使auto complete select TValue变为自动完成,但它再次添加了括号,我已明确关闭了括号。但这是向前迈出的一步,还有一步需要启动。谢谢。老实说,我几乎要永远放弃重拾器了。似乎每次我重新测试它,都会发现很多很酷的新功能功能方面,有很多小麻烦让我对整件事很恼火。因为我也有DevXPress的Refactor!Pro许可证,我也在考虑购买CodeRush。正如你所说,似乎他们在第2步中总是有一些ReSharper。是的,但我也可以这么说,因为版本1.5,第ey一直在改进。当他们收到高质量的错误报告时,情况更是如此。不仅仅是“太慢”或“占用太多内存”。我看到他们实际上修复了我报告的一些bug,并且看到他们实现了我的建议。例如,我是建议进行解决方案范围分析的人之一。我在这里发布了一份我所问问题的相当详细的副本,希望他们能够修复它。
    result = new _  (|);