Какие живые шаблоны ReSharper 4+ для C# вы используете?

Какие шаблоны ReSharper 4.0 для C# вы используете?

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


[Заголовок]

Необязательное описание

Ярлык Ярлык:Доступно в: [Настройка доступности]

// Resharper template code snippet
// comes here

Свойства макроса (при наличии):

  • Макрос1 - Значение - EditableOccurence
  • Макрос2 - Значение - EditableOccurence

Должен ли это быть на программисты.SE, потому что это субъективно?

Timwi 04.04.2011 21:07

Этот вопрос неконструктивный, и есть много информации о живых шаблонах Resharper и шаблонах Visual Studio. programmingsolved.blogspot.com/2014/04/snippet-away.html

Thulani Chivandikwa 24.04.2014 12:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
94
2
11 840
36

Ответы 36

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

Ярлык: 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

Создать новый автономный модульный тестовый пример

Ярлык: ntc
Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа

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

Макросы:

  • Тестовое задание - нет - V

Реализовать метод 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
  • КЛАСС - Содержит имя типа

Создать заглушку тестового примера для 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

Adam Lear 20.04.2010 21:24

Создайте проверку работоспособности, чтобы гарантировать, что аргумент никогда не будет нулевым

Ярлык: eann
Доступно в: Файлы C# 2.0+, где разрешен оператор типа

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

Макросы:

  • внутренний - Предложить параметр - # 1

Примечания:Хотя этот фрагмент нацелен на библиотеку .NET Lokad.Shared с открытым исходным кодом, его можно легко адаптировать для любого другого типа проверки аргументов.

Trace - Writeline, с форматом

Очень простой шаблон для добавления трассировки с форматированной строкой (например, Debug.WriteLine уже поддерживает).

Ярлык: twlf
Доступно в: Файлы C# 2.0+, где разрешен оператор

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

Свойства макроса:

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

Assert.AreEqual

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

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

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

Свободная версия:

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

Новый COM-класс

Ярлык: comclass

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

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

Макросы

  • GUID - Новый GUID
  • ИМЯ - редактируемый
  • ИНТЕРФЕЙС - редактируемый

Хороший шаблон, но он может лучше подходить для шаблона файла, чем для живого шаблона.

Drew Noakes 04.03.2009 12:10

Подтверждение вызова не требуется

Полезно при разработке приложений WinForms, когда вы хотите быть уверены, что код выполняется в правильном потоке для данного элемента. Обратите внимание, что Control реализует ISynchronizeInvoke.

Ярлык: ани

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

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

Макросы

  • SYNC_INVOKE - Предложить переменную System.ComponentModel.ISynchronizeInvoke

Вызвать, если требуется

Полезно при разработке приложений WinForms, в которых метод должен быть вызван из потоков, не относящихся к пользовательскому интерфейсу, и этот метод должен затем маршалировать вызов в поток пользовательского интерфейса.

Ярлык: inv

Доступно в: разрешен оператор файлов 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
    // ...
}

Метод тестирования MSTest

Это немного неубедительно, но полезно. Надеюсь, кому-то это пригодится.

Ярлык: testMethod

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

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

    //Arrange.

    //Act.

    //Assert.
}

$END$

Быстрый ярлык ExpectedException

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

Ярлык: ee

Доступно в: Доступно в: файлах C# 2.0+, где разрешено объявление члена типа.

[ExpectedException(typeof($TYPE$))]

Просто небольшое примечание, что это пара версий, когда ExpectedException устарел в NUnit в пользу использования Assert.Throws <>

Stécy 07.07.2011 22:01

Да, пожалуйста, все прекратите использовать ExpectedExceptionAttribute, все еще видите, что разработчики, использующие MSTest, используют это даже сегодня :-(

bytedev 16.03.2017 20:28

Объявите регистратор log4net для текущего типа.

Журнал Ярлык:

Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа

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

Свойства макроса:

  • ТИП - Содержит имя типа

Почему бы не использовать ре-резкость? частный статический только для чтения ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); with $ CurrType $: Содержит имя типа

Henrik 16.02.2011 16:51

Потому что, если я позже изменю имя типа, мне придется обновить и эту строку кода. Мой более динамичный.

Chris Brandsma 24.02.2011 02:56

ReSharper автоматически переименовывает все экземпляры имени типа. GetType () тоже работает медленнее.

Richard Dingwall 21.09.2011 17:07

Метод настройки NUnit

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

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

Хорошая точка зрения. Я могу вспомнить некоторые случаи, когда вы могли бы захотеть создать подкласс тестовых приспособлений (возможно, если бы вы хотели написать «контрактные» тесты, в которых набор утверждений должен применяться к ряду объектов), но я думаю, что в гораздо более распространенном случае виртуальные лишнее. Отредактирую.

paraquat 30.09.2009 19:43

Улучшение этого ............ private $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }

bytedev 16.03.2017 20:29

Метод NUnit Teardown

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

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

Убедитесь, что переменная равна нулю

Ярлык: ifn
Файлы Доступно в: C# 2.0+

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

Убедитесь, что переменная не равна нулю

Ярлык: ifnn
Доступно в: Файлы C# 2.0+

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

Как вас повлиял переход с C++ на C#?

Ty. 01.10.2009 17:58

Хорошо сочетается с / 'Выполнить интеллектуальное завершение' в качестве макроса для $ var $

mklein 03.01.2012 18:00

Хорошие "Условия Йоды" !! ... неразумно такое кодирование ;-))

bytedev 16.03.2017 20:25

Новый изолятор Typemock подделка

Ярлык: поддельный
Доступно в: [в файлах C# 2.0, где разрешен оператор]

$ TYPE $ $ Имя $ Fake = Isolate.Fake.Instance ();
Isolate.WhenCalled (() => $ Name $ Fake.)

Свойства макроса:
* $ TYPE $ - Предложить тип для новой переменной
* $ Name $ - значение другая переменная (Тип) с первым символом в нижнем регистре

Rhino издевается над синтаксисом записи и воспроизведения

Ярлык: RhinoMocksRecordPlaybackSyntax *

Доступно в: Файлы C# 2.0+

Примечание: Этот фрагмент кода зависит от того, что MockRepository (var mocks = new new MockRepository();) уже объявлен и инициализирован где-то еще.

using (mocks.Record())
{
    $END$
}

using (mocks.Playback())
{

}

* может показаться слишком длинным для имени ярлыка, но с intellisense не проблема при вводе. также есть другие фрагменты кода для Rhino Mocks, поэтому полное определение имени упрощает их визуальную группировку

Rhino издевается над ожидаемыми методами

Ярлык: RhinoMocksExpectMethod

Доступно в: Файлы C# 2.0+

Expect.Call($EXPECT_CODE$).Return($RETURN_VALUE$);

Ярлык: RhinoMocksExpectVoidMethod

Доступно в: Файлы C# 2.0+

Expect.Call(delegate { $EXPECT_CODE$; });

Поскольку я сейчас работаю с 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>

так далее....

Заимствуя отличную идею Дрю Ноукса, вот реализация invoke для Silverlight.

Ярлык: dca

Доступно в файлах C# 3.0.

if (!Dispatcher.CheckAccess())
{
    Dispatcher.BeginInvoke((Action)delegate { $METHOD_NAME$(sender, e); });
    return;
}

$END$

Макросы

  • $METHOD_NAME$ нередактируемое имя текущего содержащего метода.

Тестовый модуль MS

Новый тест MS Test Unit с использованием синтаксиса AAA и соглашения об именах, найденного в Искусство модульного тестирования

Ярлык: тестирование (или tst, или как хотите)
Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа

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

    // Act


    // Assert

}

Свойства макроса (при наличии):

  • MethodName - Имя тестируемого метода
  • StateUnderTest - состояние, которое вы пытаетесь протестировать
  • Ожидаемое поведение - Что вы ожидаете от происходящего

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

Вы можете напрямую импортировать шаблон:

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

Новый C# Guid

Создает новый экземпляр System.Guid, инициализированный новым сгенерированным значением guid

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

new System.Guid("$GUID$")

Свойства макроса:

  • GUID - Новый GUID - Ложь

Последние версии ReSharper теперь по умолчанию включают ярлык nguid.

Jamie Keeling 19.03.2015 15:15

Верно, но он генерирует только значение guid, а не инициализирует тип в C#.

codekaizen 19.03.2015 18:49

Напишите StyleCop-совместимую сводку для конструктора класса

(если вы устали постоянно вводить длинную стандартную сводку для каждого конструктора, чтобы она соответствовала правилу StyleCop SA1642)

Ярлык: csum

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

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

Макросы:

  • имя класса - Содержит имя типа - V

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

Так просто, так полезно - небольшая лямбда:

Ярлык: x

Доступный: C#, где разрешено выражение.

x => x.$END$

Макросы: нет.

Проверьте, является ли строка пустой или пустой.

Если вы используете .Net 4, вы можете предпочесть использовать string.IsNullOrWhiteSpace ().

Ярлык: sne

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

string.IsNullOrEmpty($VAR$)

Свойства макроса:

  • VAR - предложить переменную строкового типа. Редактируемый = правда.

Уведомить об изменении свойства

Это мой любимый вариант, потому что я часто им пользуюсь, и он выполняет для меня много работы.

Ярлык: npc

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

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

Макросы:

  • 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 без каких-либо усилий.

Много лямбд

Создайте лямбда-выражение с другим объявлением переменной для упрощения вложенности.

Ярлык: la, фунт, lc

Доступно в: Файлы C# 3.0+, в которых разрешено выражение или предложение запроса

ля определяется как:

x => x.$END$

фунт определяется как:

y => y.$END$

lc определяется как:

z => z.$END$

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

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

Ilya Ivanov 21.12.2012 15:32

Ждать его...

Приостановить ввод данных пользователем перед завершением консольного приложения.

Ярлык: пауза

Доступно в: Файлы C# 2.0+, где разрешен оператор

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

Я бы использовал Console.ReadKey(true); и позволял нажимать любую клавишу.

MasterMastic 26.09.2013 16:41

Сделать метод виртуальным

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

Ярлык: v

Доступно в: Файл C# 2.0+, где разрешено объявление члена типа

virtual $END$

Хитрость здесь в том, что после виртуального стоит пробел, который может быть трудно увидеть выше. Фактический шаблон - это «виртуальный $ END $» с включенным кодом переформатирования. Это позволяет вам перейти к точке вставки ниже (обозначенной |) и ввести v:

public |string Name { get; set; }

Технические характеристики машины - Из-за

Как активный пользователь mspec, у меня есть несколько живых шаблонов специально для MSpec. Вот быстрый способ настроить причину и отловить ошибку.

Ярлык: перед
Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа или объявление пространства имен

bece - Из-за (с отловом исключений)

Protected static Exception exception;
Because of = () => exception = Catch.Exception(() => $something$);
$END$

Сопоставление свойств AutoMapper

Ярлык: фм

Доступно в: Файлы C# 2.0+, где разрешен оператор

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

Макросы:

  • свойство - редактируемое вхождение
  • src_property - редактируемое вхождение

Примечание:

Я оставляю лямбда-«точку» выключенной, чтобы я мог ударить. немедленно и получить недвижимость intellisense. Требуется AutoMapper (http://automapper.codeplex.com/).

Генерация свойства зависимости

Создает свойство зависимости

Ярлык: 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 - Содержит имя типа - редактируемое событие отсутствует

Машина.Технические характеристики - Это

Ярлык: это

Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа или объявление пространства имен

Machine.Specifications.It $should_$ =
    () => 
    {

    };

Свойства макроса (при наличии):

  • должен_ - (без макроса) - редактируется

Равно

Ни .NET в целом, ни стандартный шаблон «равно» не позволяют легко создать хороший и простой метод Equals. Хотя тамявляютсямногомысли о том, как написать хороший метод Equals, я думаю, что следующего достаточно для 90% простых случаев. Для чего-то более сложного - особенно когда дело касается наследования - может быть лучше не использовать Equals вообще.

Ярлык: равно
Доступно в: Члены типа C# 2.0+

public override sealed bool Equals(object other) {
    return Equals(other as $TYPE$);
}

public bool Equals($TYPE$ other) {
    return !ReferenceEquals(other, null) && $END$;
}

public override int GetHashCode() {
    // *Always* call Equals.
    return 0;
}

Свойства макроса:

  • ТИП - Содержит имя типа - не редактируется

Другие вопросы по теме