Які реальні шаблони ReSharper 4+ для C # ви використовуєте? [зачинено]


94

Які шаблони ReSharper 4.0 для C # ви використовуєте?

Давайте поділимося ними у наступному форматі:


[Заголовок]

Необов’язковий опис

Ярлик: ярлик
Доступно у: [AvailabilitySetting]

// Resharper template code snippet
// comes here

Властивості макросів (за наявності):

  • Macro1 - значення - EditableOccurence
  • Macro2 - значення - EditableOccurence


Чи має це стосуватися програмістів.SE, натомість тому, що це суб’єктивно?
Timwi

Це запитання не є конструктивним, і там є багато інформації про шаблони переформатування в реальному часі та шаблони візуальної студії. programmingsolved.blogspot.com/2014/04/snippet-away.html
Тулані Чівандіква

Відповіді:


31

Проста лямбда

Такий простий, такий корисний - трохи лямбда:

Ярлик : x

Доступно : C #, де вираз дозволено.

x => x.$END$

Макроси: немає.


22

Впровадити метод 'Dispose (bool)'

Реалізуйте шаблон розпорядження Джо Даффі

Ярлик: утилізувати

Доступно у: файлах C # 2.0+, де дозволено декларування типу

public void Dispose()
{
    Dispose(true);
    System.GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
    if (!disposed)
    {
        if (disposing)
        {
            if ($MEMBER$ != null)
            {
                $MEMBER$.Dispose();
                $MEMBER$ = null;
            }
        }

        disposed = true;
    }
}

~$CLASS$()
{
    Dispose(false);
}

private bool disposed;

Властивості макросів :

  • ЧЛЕН - Запропонувати змінну System.IDisposable - Редагована ситуація №1
  • КЛАС - Містить назву типу

14

Створіть нову одиницю тестового кріплення для певного типу

Комбінація клавіш: ntf
Доступна у файлах : C # 2.0+, де дозволено декларацію члена типу або декларацію простору імен

[NUnit.Framework.TestFixtureAttribute]
public sealed class $TypeToTest$Tests
{
    [NUnit.Framework.TestAttribute]
    public void $Test$()
    {
        var t = new $TypeToTest$()
        $END$
    }
}

Макроси:

  • TypeToTest - немає - # 2
  • Тест - немає - V

13

Перевірте, чи рядок є нульовим чи порожнім.

Якщо ви використовуєте .Net 4, ви можете віддати перевагу рядку.IsNullOrWhiteSpace ().

Ярлик : sne

Доступно в : C # 2.0+, де вираз дозволено.

string.IsNullOrEmpty($VAR$)

Властивості макросів :

  • VAR - запропонуйте змінну типу string. Можна редагувати = істина.

11

Створіть новий автономний блок тестів

Ярлик: ntc
Доступно у файлах : C # 2.0+, де дозволено декларування членів типу

[NUnit.Framework.TestAttribute]
public void $Test$()
{
    $END$
}

Макроси:

  • Тест - немає - V

10

Оголосіть реєстратор log4net для поточного типу.

Ярлик: журнал

Доступно у: файлах C # 2.0+, де дозволено декларування типу

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof($TYPE$));

Властивості макросів :

  • TYPE - Містить назву типу

Чому б не скористатися цим, з повторним загостренням? приватний статичний для читання ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); with $ CurrType $: Містить назву типу
Генрік

Тому що якщо я пізніше зміню назву типу, мені доведеться також оновити цей рядок коду. Моя більш динамічна.
Chris Brandsma

ReSharper автоматично перейменовує всі екземпляри імені типу. GetType () теж повільніший.
Річард Дінгволл,

9

Тест MS Тестовий блок

Новий тест MS Test Unit з використанням синтаксису AAA та правила іменування, знайденого в Art Of Unit Testing

Ярлик: тестування (або tst, або що завгодно)
Доступно у файлах : C # 2.0+, де дозволено декларування типу типу

[TestMethod]
public void $MethodName$_$StateUnderTest$_$ExpectedBehavior$()
{
    // Arrange
    $END$

    // Act


    // Assert

}

Властивості макросів (за наявності):

  • MethodName - Назва методу, що перевіряється
  • StateUnderTest - стан, який ви намагаєтеся перевірити
  • Очікувана поведінка - те, що ви очікуєте

8

Перевірте, чи є змінна нульовою

Ярлик: ifn
Доступно у: файлах C # 2.0+

if (null == $var$)
{
    $END$
}

Перевірте, якщо змінна не має значення null

Ярлик: ifnn
Доступно у: файлах C # 2.0+

if (null != $var$)
{
    $END$
}

15
Як ставився до вас перехід від C ++ до C #?
Тай.

Добре проходить w / 'Виконати розумне завершення' як макрос для $ var $
mklein

Хороші "умови йоди" !! ... нерозумно такий спосіб кодування ;-))
bytedev

7

Написати стильний звіт для конструктора класів

(якщо ви втомилися постійно вводити довгі стандартні зведення для кожного конструктора, щоб він відповідав правилу StyleCop SA1642)

Ярлик: csum

Доступно на: C # 2.0+

Initializes a new instance of the <see cref="$classname$"/> class.$END$

Макроси:

  • classname - Містить назву типу - V

7

Assert.AreEqual

Простий шаблон для додавання тверджень до модульного тесту

Ярлик : ae
Доступний у : у файлах C # 2.0+, де дозволено твердження

Assert.AreEqual($expected$, $actual$);$END$

Вільна версія:

Assert.That($expected$, Is.EqualTo($actual$));$END$

7

Багато лямбдас

Створіть лямбда-вираз з іншим оголошенням змінної для зручності вкладання.

Ярлик: la, lb, lc

Доступно у: файлах C # 3.0+, де дозволено вираз або запит

la визначається як:

x => x.$END$

lb визначається як:

y => y.$END$

lc визначається як:

z => z.$END$

Це схоже на Шона Кірона вище, за винятком того, що я визначаю декілька лямбда-живих шаблонів для зручного вкладання лямбд. " la " найчастіше використовується, але інші корисні при роботі з такими виразами:

items.ForEach(x => x.Children.ForEach(y => Console.WriteLine(y.Name)));

нормально використовувати імена x, y для лямбда-аргументів? якщо у вас є вкладені лямбди з двох-трьох рівнів, ви, мабуть, не хочете запам’ятовувати, що означає x, y, z на кожному рівні. Розглядаючи ваш приклад, я б пішов з items.ForEach (item => ... і item.Children.ForEach (child => ... так що в кінці я мав би child.Name замість y.Name. Я не розумію Не думаю, що іменування аргументів лямбда можна порівнювати з цикличними індексами i, j, k
Ілля Іванов

6

Чекайте ...

Пауза для введення користувачем перед закінченням консольної програми.

Ярлик: пауза

Доступно у: файлах C # 2.0+, де дозволено твердження

System.Console.WriteLine("Press <ENTER> to exit...");
System.Console.ReadLine();$END$

Я б використовував Console.ReadKey(true);і дозволяв натискати будь-яку клавішу.
MasterMastic

6

Генерування властивості залежності

Генерує властивість залежності

Ярлик: dp
Доступно в: C # 3.0, де дозволено декларування членів

public static readonly System.Windows.DependencyProperty $PropertyName$Property =
        System.Windows.DependencyProperty.Register("$PropertyName$",
                                                   typeof ($PropertyType$),
                                                   typeof ($OwnerType$));

    public $PropertyType$ $PropertyName$
    {
        get { return ($PropertyType$) GetValue($PropertyName$Property); }
        set { SetValue($PropertyName$Property, value); }
    }

$END$

Властивості макросів (якщо вони є):

PropertyName - Немає макросів - # 3
PropertyType - Вгадайте тип вгадування на даний момент - # 2
OwnerType - Містить назву типу - відсутність редагованих випадків


5

Повідомте власність змінено

Це мій улюблений, тому що я ним часто користуюся, і це робить для мене велику роботу.

Ярлик : npc

Доступно в : C # 2.0+, де вираз дозволено.

if (value != _$LOWEREDMEMBER$)
{
  _$LOWEREDMEMBER$ = value;
  NotifyPropertyChanged("$MEMBER$");
}

Макроси :

  • ЧЛЕН - Містить ім’я типу члена. Не можна редагувати. Примітка: переконайтесь, що цей є першим у списку.
  • LOWEREDMEMBER - Значення MEMBER з першим символом у нижньому регістрі. Не можна редагувати.

Використання : всередині сеттера властивостей, як це:

private string _dateOfBirth;
public string DateOfBirth
{
   get { return _dateOfBirth; }
   set
   {
      npc<--tab from here
   }
}

Він передбачає, що ваша змінна підтримки починається з "_". Замініть це тим, чим ви користуєтесь. Також передбачається, що у вас є метод зміни властивостей приблизно такий:

private void NotifyPropertyChanged(String info)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(info));
   }
}

Насправді, версія цього, яку я використовую, заснована на лямбда (тому що я люблю свої лямбди!) І створює наведене нижче. Принципи такі ж, як і вище.

public decimal CircuitConductorLive
{
   get { return _circuitConductorLive; }
   set { Set(x => x.CircuitConductorLive, ref _circuitConductorLive, value); }
}

Саме тоді я не використовую надзвичайно елегантний та корисний PostSharp для того, щоб виконувати всю справу INotifyPropertyChanged без жодних зусиль , тобто.


5

Швидкий ярлик ExpectedException

Просто швидкий ярлик, щоб додати до атрибутів модульного тесту.

Ярлик : ee

Доступно у : Доступно у: файлах C # 2.0+, де дозволено декларування типу

[ExpectedException(typeof($TYPE$))]

Просто коротко зауважимо, що зараз пара версій ExposedException застаріла в NUnit на користь використання Assert.Throws <>
Stécy

Так, будь ласка, будь-хто припиніть використовувати ExpectedExceptionAttribute, все ще бачите, як розробники, що використовують MSTest, використовують це навіть сьогодні :-(
bytedev

5

Складання властивостей AutoMapper

Ярлик: fm

Доступно у: файлах C # 2.0+, де дозволено твердження

.ForMember(d => d$property$, o => o.MapFrom(s => s$src_property$))
$END$

Макроси:

  • властивість - можливість редагування
  • src_property - можливість редагування

Примітка:

Я залишаю лямбда-крапку, щоб я міг вдарити. негайно і отримати майно intellisense. Потрібен AutoMapper ( http://automapper.codeplex.com/ ).


4

Створіть заглушку тесту для NUnit

Це може служити нагадуванням (про функціональність для реалізації або тестування), яке відображається в модулі модульного тесту (як і будь-який інший ігнорований тест),

Ярлик: nts
Доступно у файлах : C # 2.0+, де дозволено декларування типу

[Test, Ignore]
public void $TestName$()
{
    throw new NotImplementedException();
}
$END$

Я роблю варіацію щодо цього, але з явним Assert.Fail () у тілі: aleriel.com/blog/2010/04/07/replace-paper-with-unit-tests
Адам Лір

4

Закликайте, якщо потрібно

Корисно при розробці додатків WinForms, де метод повинен викликатись із потоків, що не належать до інтерфейсу користувача, і тоді цей метод повинен маршувати виклик до потоку інтерфейсу.

Ярлик : інв

Доступно у : Дозволено заяву про файли C # 3.0+

if (InvokeRequired)
{
    Invoke((System.Action)delegate { $METHOD_NAME$($END$); });
    return;
}

Макроси

  • METHOD_NAME - Містить ім’я члена типу

Зазвичай ви використовуєте цей шаблон як перший оператор у заданому методі, і результат нагадує:

void DoSomething(Type1 arg1)
{
    if (InvokeRequired)
    {
        Invoke((Action)delegate { DoSomething(arg1); });
        return;
    }

    // Rest of method will only execute on the correct thread
    // ...
}

4

Нова інструкція C #

Створює новий екземпляр System.Guid, ініціалізований до нового згенерованого значення GUID

Ярлик: csguid Доступно в: у файлах C # 2.0+

new System.Guid("$GUID$")

Властивості макросів :

  • GUID - Новий GUID - Помилковий

Останні версії ReSharper тепер за замовчуванням містять ярлик nguid .
Джеймі Кілінг,

Правда, але він генерує лише значення GUID, а не ініціалізує тип у C #.
codekaizen

4

Метод тестування MSTest

Це трохи кульгаво, але корисно. Сподіваємось, хтось отримає з цього якусь корисність.

Ярлик: testMethod

Доступно на: C # 2.0

[TestMethod]
public void $TestName$()
{
    throw new NotImplementedException();

    //Arrange.

    //Act.

    //Assert.
}

$END$

4

Метод налаштування NUnit

Ярлик: налаштування
Доступно у: Доступно у: файлах C # 2.0+, де дозволено декларування типу

[NUnit.Framework.SetUp]
public void SetUp()
{
    $END$
}

Гарна думка. Я можу подумати про деякі випадки, коли ви можете захотіти підклас тестових приладів (можливо, якщо ви хочете написати "контрактні" тести, де набір тверджень повинен застосовуватися до ряду об'єктів), але я думаю, що в набагато більш поширеному випадку, віртуальний є зайвим. Я відредагую це.
паракват

Покращення цього ............ private $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }
bytedev

4

Метод розбиття NUnit

Ярлик: teardown
Доступно у: Доступно у: файлах C # 2.0+, де дозволено декларування членів типу

[NUnit.Framework.TearDown]
public void TearDown()
{
    $END$
}

3

Створіть перевірку осудності, щоб переконатися, що аргумент ніколи не є нульовим

Ярлик: eann
Доступно у: файлах C # 2.0+, де дозволено твердження типу

Enforce.ArgumentNotNull($inner$, "$inner$");

Макроси:

  • внутрішній - Запропонувати параметр - # 1

Примітки: Хоча цей фрагмент націлений на бібліотеку .NET Lokad.Shared із відкритим кодом , його можна легко адаптувати до будь-якого іншого типу перевірки аргументів.


3

Новий COM-клас

Ярлик : comclass

Доступно у : файлах C # 2.0+, де дозволена декларація про член типу або простір імен

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("$GUID$")]
public class $NAME$ : $INTERFACE$
{
    $END$
}

Макроси

  • GUID - новий GUID
  • ІМЯ - Можна редагувати
  • ІНТЕРФЕЙС - Можна редагувати

2
Хороший шаблон, але це, можливо, більше підходить для шаблону файлу, а не для реального шаблону.
Дрю Ноукс

3

Затверджувати Invoke не потрібно

Корисно при розробці програм WinForms, де ви хочете бути впевненими, що код виконується у правильному потоці для даного елемента. Зверніть увагу, що Controlзнаряддя ISynchronizeInvoke.

Ярлик : ani

Доступно у : Дозволено заяву про файли C # 2.0+

Debug.Assert(!$SYNC_INVOKE$.InvokeRequired, "InvokeRequired");

Макроси

  • SYNC_INVOKE - Запропонувати змінну зSystem.ComponentModel.ISynchronizeInvoke

2

Трасування - лінія запису, з форматом

Дуже простий шаблон для додавання трасування із відформатованим рядком (наприклад, Debug.WriteLine вже підтримує).

Ярлик: twlf
Доступно у: файлах C # 2.0+, де дозволено твердження

Trace.WriteLine(string.Format("$MASK$",$ARGUMENT$));

Властивості макросів:

  • Аргумент - value- EditableOccurence
  • Маска - "{0}"- EditableOccurence

1

Новий підробний ізолятор Typemock

Ярлик : підроблений
Доступно у : [у файлах c # 2.0, де дозволено твердження]

$ TYPE $ $ Назва $ Fake = Isolate.Fake.Instance ();
Isolate.WhenCalled (() => $ Name $ Fake.)

Властивості макросів:
* $ TYPE $ - Запропонувати тип для нової змінної
* $ Name $ - Значення іншої змінної ( Тип ) із першим символом у нижньому регістрі


1

Оскільки я зараз працюю з Unity, я придумав кілька, щоб полегшити своє життя:


Введіть Псевдонім

Ярлик : ta
Доступно у : * .xml; * .config

<typeAlias alias="$ALIAS$" type="$TYPE$,$ASSEMBLY$"/>

Декларація типу

Це тип без імені та аргументів

Ярлик : tp
Доступно у : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$"/>

Декларація типу (із назвою)

Це тип із іменем та без аргументів

Ярлик : tn
Доступно у : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$" name="$NAME$"/>

Декларація типу за допомогою конструктора

Це тип із іменем та без аргументів

Ярлик : tpc
Доступно у : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$">
  <typeConfig>
    <constructor>
        $PARAMS$
    </constructor>
  </typeConfig>
</type>

тощо ....


1

Блок конфігурації log4net XML

Ви можете імпортувати шаблон безпосередньо:

<TemplatesExport family="Live Templates">
  <Template uid="49c599bb-a1ec-4def-a2ad-01de05799843" shortcut="log4" description="inserts log4net XML configuration block" text="  &lt;configSections&gt;&#xD;&#xA;    &lt;section name=&quot;log4net&quot; type=&quot;log4net.Config.Log4NetConfigurationSectionHandler,log4net&quot; /&gt;&#xD;&#xA;  &lt;/configSections&gt;&#xD;&#xA;&#xD;&#xA;  &lt;log4net debug=&quot;false&quot;&gt;&#xD;&#xA;    &lt;appender name=&quot;LogFileAppender&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;&#xD;&#xA;      &lt;param name=&quot;File&quot; value=&quot;logs\\$LogFileName$.log&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;AppendToFile&quot; value=&quot;false&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;RollingStyle&quot; value=&quot;Size&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;MaxSizeRollBackups&quot; value=&quot;5&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;MaximumFileSize&quot; value=&quot;5000KB&quot; /&gt;&#xD;&#xA;      &lt;param name=&quot;StaticLogFileName&quot; value=&quot;true&quot; /&gt;&#xD;&#xA;&#xD;&#xA;      &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;&#xD;&#xA;        &lt;param name=&quot;ConversionPattern&quot; value=&quot;%date [%3thread] %-5level %-40logger{3} - %message%newline&quot; /&gt;&#xD;&#xA;      &lt;/layout&gt;&#xD;&#xA;    &lt;/appender&gt;&#xD;&#xA;&#xD;&#xA;    &lt;appender name=&quot;ConsoleAppender&quot; type=&quot;log4net.Appender.ConsoleAppender&quot;&gt;&#xD;&#xA;      &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;&#xD;&#xA;        &lt;param name=&quot;ConversionPattern&quot; value=&quot;%message%newline&quot; /&gt;&#xD;&#xA;      &lt;/layout&gt;&#xD;&#xA;    &lt;/appender&gt;&#xD;&#xA;&#xD;&#xA;    &lt;root&gt;&#xD;&#xA;      &lt;priority value=&quot;DEBUG&quot; /&gt;&#xD;&#xA;      &lt;appender-ref ref=&quot;LogFileAppender&quot; /&gt;&#xD;&#xA;    &lt;/root&gt;&#xD;&#xA;  &lt;/log4net&gt;&#xD;&#xA;" reformat="False" shortenQualifiedReferences="False">
    <Context>
      <FileNameContext mask="*.config" />
    </Context>
    <Categories />
    <Variables>
      <Variable name="LogFileName" expression="getOutputName()" initialRange="0" />
    </Variables>
    <CustomProperties />
  </Template>
</TemplatesExport>

1

Зробити метод віртуальним

Додає віртуальне ключове слово. Особливо корисно при використанні NHibernate, EF або подібного фреймворку, де методи та / або властивості повинні бути віртуальними, щоб уможливити ліниве завантаження або проксі.

Ярлик: v

Доступно у: файлі C # 2.0+, де дозволено декларування членів типу

virtual $END$

Хитрість тут полягає у просторі після віртуального, який важко побачити вище. Фактичний шаблон - "віртуальний $ END $" із увімкненим кодом переформатування. Це дозволяє перейти до точки вставки нижче (позначається |) і ввести v:

public |string Name { get; set; }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.