Как окружить блок кода оператором использования в ReSharper? - PullRequest
4 голосов
/ 28 ноября 2008

Я наблюдаю за превосходным сериалом Summer of NHibernate Стивена Болена и смотрю, как он взаимодействует с CodeRush. Я недавно установил ReSharper (я новичок в ReSharper), и я пытаюсь найти некоторые эквиваленты производительности ReSharper, которые Стивен демонстрирует (тангенциально) с CodeRush.

В качестве примера он демонстрирует выделение блока кода, который выглядит следующим образом:

ISession session = GetSession();
session.xxx

, а затем превратить его в

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

Он делает это, выделяя блок, который хочет , окружает оператором using, а затем вызывает некоторый шаблон CodeRush. Я не смог понять, как сделать то же самое с ReSharper. Я нашел команду ReSharper Surround (внутри команды Code), но когда вы выбираете оператор с помощью , он окружает выделенный вами блок кода, но он не выглядит умным достаточным первая строка в предложении использования. То есть это приводит к:

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

, что требует от меня переместить первую строку в предложение using. Я скучаю по более легкому пути?

Ответы [ 5 ]

13 голосов
/ 29 ноября 2008

Resharper предлагает эту возможность. Если ваш класс реализует IDisposable, просто нажмите Alt-Enter:

(удалено мертвая ссылка "До")
(удалено неработающее изображение "После")

Вы также должны навести курсор на имя переменной. Вот так: SShot1 SShot2 SShot3

1 голос
/ 09 января 2009

Я просто смотрел этот эпизод и размышлял, не задал ли я тот же вопрос. Исходя из приведенных здесь выводов, я обнаружил, что если бы у меня был этот код:

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 просто потому, что у вас есть визуальные индикаторы того, что происходит. Интересно, будет ли это мешать, если я не буду представлять.

И вы НЕ РЕШАРПЕР-новичок: вы - резарпер-падаван :) 1011 *

Swampy

1 голос
/ 29 ноября 2008

В качестве альтернативы, если вы находитесь в ситуации, когда использование уже набрано, и вы хотите заключить код в фигурные скобки ... вы можете сделать CTRL - E + U , а затем 7 .

Это обернет выделение скобками.

0 голосов
/ 11 июня 2015

В Visual Studio 2013 это CTRL + E + U
Это должно привести следующий диалог

enter image description here

, а затем A для using.

Надеюсь, это сэкономит вам время.

0 голосов
/ 29 ноября 2008

Интересно, что-то не так с моей настройкой ReSharper. Когда мой курсор находится на

Class1 c = new Class1();

строка в примере кода ниже, ReSharper только предлагает, Использовать 'var' . Если предложения НИКОГДА Разделение декларации и присваивания NOR Использование конструкции ??

(Миндаугас - Ваш комментарий, конечно, правильный о 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();
        }
    }
}
...