【问题标题】:How to surround a code block with a using statement in ReSharper?如何在 ReSharper 中使用 using 语句包围代码块?
【发布时间】:2008-11-28 18:29:17
【问题描述】:

我正在观看 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 命令(在代码命令中),但是当您选择 using 语句时,它确实包围了您突出显示的代码块,但它似乎不够智能将第一行放在 using 子句中。也就是说,它会导致:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    (删除图片死链接“之前”)
    (删除图片死链接“之后”)

    您还必须将光标放在变量名上。像这样:SShot1SShot2SShot3

    【讨论】:

    • 这对我不起作用?我只得到拆分声明和分配?命名空间 DataAccessLayer { public class hptest { public void Test() { DirectoryInfo di = new DirectoryInfo("xx"); FileInfo[] 文件 = di.GetFiles(); } } }
    • DirectoryInfo 没有实现 IDisposable。在“using”关键字的参数列表中定义的任何类实例都会在语句末尾调用其 Dispose() 成员。 DirectoryInfo 没有要调用的 Dispose() 成员,因此它不能在“使用”语句中。
    【解决方案2】:

    我只是在看那一集,想知道我是否也有同样的问题。根据这里的线索,我发现如果我有这个代码:

    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】:

      或者,如果您处于 using 已经输入的情况并且您想用大括号包装大量代码...您可以执行 CTRL-E kbd> + U 然后是 7

      它将用大括号包裹选择。

      【讨论】:

      • 它的 8. 7 仅代表 {}(可能是新版本的变化)
      【解决方案4】:

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

      Class1 c = new Class1();
      

      下面代码示例中的行,ReSharper 仅建议,使用'var'。如果提供 NEITHER 拆分声明和赋值 NOR 放入 using 构造??

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

      【讨论】:

      【解决方案5】:

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

      然后是 Ausing

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

      【讨论】:

        猜你喜欢
        • 2016-10-29
        • 2020-12-08
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多