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

时间:2009-05-15 11:00:46

标签: c# visual-studio-2008 resharper

我遇到了新安装的Visual Studio 2008(新电脑)和ReSharper 4.5的问题。

修改:问题已在http://youtrack.jetbrains.com/issue/RSRP-107956开启。


我有以下代码:

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;
}

标记为问题的行是我遇到问题的地方。

当我输入这个(|标记我的光标点)时:

result = new |

然后我在其中获得了带有TValue的intellisense下拉列表,并且已被选中。

无论我现在输入什么,这都是我最终的结果:

result = new _  (|);

再次,|标记光标位置。这里有几个问题:

  1. 无论我输入什么内容,都会在下划线后面插入一个制表符,而不是我必须在上面使用的两个空格。
  2. 我在完成时关闭了括号和括号的添加,但是仍然为这个特定的构造添加了它们
  3. 似乎不可能让ReSharper插入所选的类型,它只是添加一个下划线(不,下划线不是我的说法“类型就在这里”,它扩展到我上面显示的内容,没有类型,但改为使用下划线+ Tab字符)
  4. 当intellisense启动时我试过按键:

    • 空格(差异:括号看起来像这样:( |),即添加空格)
    • 标签
    • 输入
    • ( - 即,左括号
    • T +上面的任何一个(即输入TValue的第一个字母并希望有帮助,但它没有)

    唯一“有帮助”的是,如果我按下一个切换到更全面的智能感知下拉键的键,就像默认的Alt-Right一样,那么它只会添加更多我可以选择的东西,但仍然选择了TValue,但是现在如果我点击Enter或Tab,代码就会正确扩展。

    有谁知道我需要调整什么?


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

    这只是ReSharper中的一个(另一个)错误吗?

    请注意,如果我在该行上正确编写代码,即。编写TValue而不是下划线,项目构建。


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

2 个答案:

答案 0 :(得分:2)

自1.5版以来,我一直是ReSharper用户,我注意到了某种模式。首先,他们支持C#的一个功能,然后他们支持得相当好,然后他们支持它,除了边缘情况,最后他们支持它除了罕见的错误。

他们在第2步,或者3,使用泛型。他们已经达到了GetOrCreate内部知道TValue是一个类型参数的地步,他们现在知道它有一个new()约束,所以应该被认为是在“new”之后填写构造函数。但他们似乎有一个小错误,实际上使功能顺利运作。

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

答案 1 :(得分:1)

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

对我来说,输入两个字符“电视”是有帮助的,然后智能(Tab或Ctrl + Space)会扩展为TValue(|)。 但是,当我在“电视”上输入“新”和“直播”时,它无法正常工作。 Aftern'新'我必须按Esc ......这是一种奇怪的行为,确实......

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