我遇到了新安装的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 _ (|);
再次,|标记光标位置。这里有几个问题:
当intellisense启动时我试过按键:
唯一“有帮助”的是,如果我按下一个切换到更全面的智能感知下拉键的键,就像默认的Alt-Right一样,那么它只会添加更多我可以选择的东西,但仍然选择了TValue,但是现在如果我点击Enter或Tab,代码就会正确扩展。
有谁知道我需要调整什么?
编辑:在我发布之前,我考虑了这个方法并决定可能不需要参数验证,所以我把它拿走了,然后看,现在它自动完成了
这只是ReSharper中的一个(另一个)错误吗?
请注意,如果我在该行上正确编写代码,即。编写TValue而不是下划线,项目构建。
编辑:注意,ReSharper中没有启用的实时模板,这是我禁用的第一件事,只是为了测试是否有一个奇怪的模板覆盖了我的选择。
答案 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子句)帮助我。