改变ReSharper的“完整声明”行为

时间:2014-01-10 16:52:15

标签: c# resharper

我发现我一直在与ReSharper的完整声明(Ctrl + Shift + Enter)行为进行斗争,我想知道是否有办法自定义它。

我将编辑一些代码,例如:

var a = 0;
var b = 1;

然后我想把它添加到它:

var a = 0;
using (var frob = new Thingy())
{
    a = frob.Foo();
}
var b = 1;

如果我不使用“使用”实时模板,只需输入,我在输入thingy后点击Complete Statement,Resharper会将其复制到此:

var a = 0;
using (var frob = new Thingy())
    var b = 1;

所以,我想知道,有没有办法告诉它总是创建新的大括号而不是试图将下一行插入你要添加的任何语句中?

这是使用ReSharper 8.1。我从版本4开始就一直在使用它,这感觉就像一个新问题,所以也许它们改变了默认行为。

更新: 鉴于Thomas Weller的回答,以及@Resharper在Twitter上的回复,我做了更多的调查。

这里似乎存在差异。如果你查看Complete Statement的文档,它会明确指出:

  

使用完整声明,而不是这个棘手的程序,只有你   必须按Ctrl + Shift + Enter,ReSharper将自动   插入一个右括号,以及两个大括号,然后放入   在你可以继续编写方法体的地方   以类似的方式,已知完整声明可以使用   以下语言结构:

     

[...]   声明:if,while,do,switch,使用,   锁定,继续,中断和返回语句;案例和默认   条款;将单行语句转换为块语句。

在对此进行测试时,我注意到if语句的行为符合预期(它添加了大括号并将克拉放在新行内)。 switchchecked也是如此。

另一方面,whileusingfixed的行为与我上面的示例相同,它将共同使用下一行代码而不是新代码块。

这似乎相当不一致。应该更新文档,或者所有语句类型的行为都应该相同。

因此,似乎这个错误报告比SO问题更合适。如果有人对提出它感兴趣,那么这是link to the bug。 :)

1 个答案:

答案 0 :(得分:3)

您没有按预期使用R#的“完整声明”功能,因此该工具无法准确找出您想要实现的目标。

只要模板在IntelliSense中可用,就使用Live模板完成using语句,然后它会为您提供括号。然后,Live模板将引导您通过在相应的部分一个接一个地突出显示/设置光标来键入语句的各个部分(不用担心,您不需要触摸鼠标)。

或者,Live模板始终可通过Live模板资源管理器访问和编辑(实时模板类似于'普通'代码模板)。但我建议不要使用预定义的,除非你有充分的理由这样做。