如何在ReSharper中使用using语句包围代码块?

时间:2008-11-28 18:29:17

标签: visual-studio visual-studio-2008 refactoring resharper coderush

我正在观看Stephen A Bohlen的优秀Summer of NHibernate系列节目,并一直在观看他与CodeRush的互动。我最近安装了ReSharper(我是ReSharper新手),我正试图找到一些与Stephen一起(切向)使用CodeRush的ReSharper生产力等价物。

作为一个例子,他演示了如何突出显示如下代码块:

ISession session = GetSession();
session.xxx

然后把它变成

using (ISession session = GetSession())
{
   session.xxx
}

他通过使用using语句突出显示他想要环绕的块然后调用一些CodeRush模板来完成此操作。我一直无法弄清楚如何用ReSharper做同样的事情。我找到了ReSharper Surround命令(在Code命令中),但当你选择 using 语句时,它确实包围了你突出显示的代码块,但它似乎不是 smart 将第一行放在using子句中。也就是说,它导致:

using () 
{
  ISession session = GetSession();
  session.xxx
}            

这要求我将第一行移动到using子句中。我错过了一种更简单的方法吗?

5 个答案:

答案 0 :(得分:13)

Resharper提供此功能。如果您的类实现了IDisposable,只需按Alt-Enter:

(删除图像死链接“之前”)
(删除图像死链接“After”)

您还必须将光标放在变量名称上。像这样:SShot1 SShot2 SShot3

答案 1 :(得分:1)

或者,如果您处于已经输入的使用状态且想要用大括号包装一定数量的代码...您可以执行 CTRL - E + U 然后 7

它会用大括号包装选区。

答案 2 :(得分:1)

我正在观看那集,并想知道我是否也是同一个问题。基于这里的线索,我发现如果我有这个代码:

1        IList<Supplier> returnValue;
2        ISession session = SessionProvider.GetSession();
3        returnValue = session.CreateQuery("select from Supplier s").List<Supplier>();
4        return returnValue;

如果我将光标放在第2行的会话变量上,然后按Alt-Enter,它会给我:

1        IList<Supplier> returnValue;
2        using (ISession session = SessionProvider.GetSession())
3        {
4            returnValue = session.CreateQuery("select from Supplier s").List<Supplier>();
5        }
6        return returnValue;

它确实让我得了几次,因为我没有把光标放在变量名上,但我确实让它工作了。

只是旁注,我真的更喜欢观看他们使用Code Rush的演示,因为你有可视指示正在发生的事情。我想知道如果我不出席,那会不会阻碍。

而且你不是一个Resharper新手:你是一个Resharper Padawan:)

沼泽

答案 3 :(得分:0)

我想知道我的ReSharper设置是否有问题。当我的光标在

上时
Class1 c = new Class1();
代码示例中的

行,ReSharper仅建议使用'var'。如果提供NEITHER 拆分声明和分配 NOR 投入使用构造 ??

(Mindaugas - 你的评论当然对于DirectoryInfo是正确的。我的不好。希望这个例子能更清楚地说明我所看到的内容。)

using System;

namespace DataAccessLayerTest {
    public class Class1 : IDisposable {
        public void Moo()
        {
            Console.Out.WriteLine("Moo");
        }
        public void Dispose()
        {
        }
    }

    public class Class2 {
        public void m()
        {
            Class1 c = new Class1();
            c.Moo();
        }
    }
}

答案 4 :(得分:0)

在Visual Studio 2013上, CTRL + E + U
这应该带来以下对话框

enter image description here

然后 A using

希望这可以节省你一些时间。