Какие шаблоны ReSharper 4.0 для C# вы используете?
Давайте поделимся ими в следующем формате:
Необязательное описание
Ярлык Ярлык:Доступно в: [Настройка доступности]
// Resharper template code snippet
// comes here
Свойства макроса (при наличии):
Этот вопрос неконструктивный, и есть много информации о живых шаблонах Resharper и шаблонах Visual Studio. programmingsolved.blogspot.com/2014/04/snippet-away.html





Ярлык: ntf
Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа или пространства имен
[NUnit.Framework.TestFixtureAttribute]
public sealed class $TypeToTest$Tests
{
[NUnit.Framework.TestAttribute]
public void $Test$()
{
var t = new $TypeToTest$()
$END$
}
}
Макросы:
Ярлык: ntc
Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа
[NUnit.Framework.TestAttribute]
public void $Test$()
{
$END$
}
Макросы:
Реализовать Шаблон утилизации Джо Даффи
Ярлык: утилизировать
Доступно в: Файлы 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;
Свойства макроса:
Это может служить напоминанием (о функциональных возможностях для реализации или тестирования), которое отображается в средстве выполнения модульного теста (как и любой другой игнорируемый тест),
Ярлык: 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
Ярлык: eann
Доступно в: Файлы C# 2.0+, где разрешен оператор типа
Enforce.ArgumentNotNull($inner$, "$inner$");
Макросы:
Примечания:Хотя этот фрагмент нацелен на библиотеку .NET Lokad.Shared с открытым исходным кодом, его можно легко адаптировать для любого другого типа проверки аргументов.
Очень простой шаблон для добавления трассировки с форматированной строкой (например, Debug.WriteLine уже поддерживает).
Ярлык: twlf
Доступно в: Файлы C# 2.0+, где разрешен оператор
Trace.WriteLine(string.Format("$MASK$",$ARGUMENT$));
Свойства макроса:
value - EditableOccurence"{0}" - EditableOccurenceAssert.AreEqual
Простой шаблон для добавления утверждений в модульный тест
Ярлык: ae
Доступно в: в файлах C# 2.0+, где разрешен оператор
Assert.AreEqual($expected$, $actual$);$END$
Свободная версия:
Assert.That($expected$, Is.EqualTo($actual$));$END$
Ярлык: comclass
Доступно в: файлы C# 2.0+, в которых разрешено объявление члена типа или объявление пространства имен.
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("$GUID$")]
public class $NAME$ : $INTERFACE$
{
$END$
}
Макросы
Хороший шаблон, но он может лучше подходить для шаблона файла, чем для живого шаблона.
Полезно при разработке приложений WinForms, когда вы хотите быть уверены, что код выполняется в правильном потоке для данного элемента. Обратите внимание, что Control реализует ISynchronizeInvoke.
Ярлык: ани
Доступно в: разрешен оператор файлов C# 2.0+
Debug.Assert(!$SYNC_INVOKE$.InvokeRequired, "InvokeRequired");
Макросы
System.ComponentModel.ISynchronizeInvokeПолезно при разработке приложений WinForms, в которых метод должен быть вызван из потоков, не относящихся к пользовательскому интерфейсу, и этот метод должен затем маршалировать вызов в поток пользовательского интерфейса.
Ярлык: inv
Доступно в: разрешен оператор файлов C# 3.0+
if (InvokeRequired)
{
Invoke((System.Action)delegate { $METHOD_NAME$($END$); });
return;
}
Макросы
Обычно вы используете этот шаблон в качестве первого оператора в данном методе, и результат будет примерно таким:
void DoSomething(Type1 arg1)
{
if (InvokeRequired)
{
Invoke((Action)delegate { DoSomething(arg1); });
return;
}
// Rest of method will only execute on the correct thread
// ...
}
Это немного неубедительно, но полезно. Надеюсь, кому-то это пригодится.
Ярлык: testMethod
Доступно на: C# 2.0.
[TestMethod]
public void $TestName$()
{
throw new NotImplementedException();
//Arrange.
//Act.
//Assert.
}
$END$
Просто быстрый ярлык для добавления к моим атрибутам модульного теста.
Ярлык: ee
Доступно в: Доступно в: файлах C# 2.0+, где разрешено объявление члена типа.
[ExpectedException(typeof($TYPE$))]
Просто небольшое примечание, что это пара версий, когда ExpectedException устарел в NUnit в пользу использования Assert.Throws <>
Да, пожалуйста, все прекратите использовать ExpectedExceptionAttribute, все еще видите, что разработчики, использующие MSTest, используют это даже сегодня :-(
Объявите регистратор log4net для текущего типа.
Журнал Ярлык:
Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof($TYPE$));
Свойства макроса:
Почему бы не использовать ре-резкость? частный статический только для чтения ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); with $ CurrType $: Содержит имя типа
Потому что, если я позже изменю имя типа, мне придется обновить и эту строку кода. Мой более динамичный.
ReSharper автоматически переименовывает все экземпляры имени типа. GetType () тоже работает медленнее.
Настройка Ярлык:Доступно в: Доступно в: файлах C# 2.0+, где разрешено объявление члена типа
[NUnit.Framework.SetUp]
public void SetUp()
{
$END$
}
Хорошая точка зрения. Я могу вспомнить некоторые случаи, когда вы могли бы захотеть создать подкласс тестовых приспособлений (возможно, если бы вы хотели написать «контрактные» тесты, в которых набор утверждений должен применяться к ряду объектов), но я думаю, что в гораздо более распространенном случае виртуальные лишнее. Отредактирую.
Улучшение этого ............ private $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }
Разборка Ярлык:Доступно в: Доступно в: файлах 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#?
Хорошо сочетается с / 'Выполнить интеллектуальное завершение' в качестве макроса для $ var $
Хорошие "Условия Йоды" !! ... неразумно такое кодирование ;-))
Ярлык: поддельный
Доступно в: [в файлах C# 2.0, где разрешен оператор]
$ TYPE $ $ Имя $ Fake = Isolate.Fake.Instance ();
Isolate.WhenCalled (() => $ Name $ Fake.)
Свойства макроса:
* $ TYPE $ - Предложить тип для новой переменной
* $ Name $ - значение другая переменная (Тип) с первым символом в нижнем регистре
Ярлык: RhinoMocksRecordPlaybackSyntax *
Доступно в: Файлы C# 2.0+
Примечание: Этот фрагмент кода зависит от того, что MockRepository (var mocks = new new MockRepository();) уже объявлен и инициализирован где-то еще.
using (mocks.Record())
{
$END$
}
using (mocks.Playback())
{
}
* может показаться слишком длинным для имени ярлыка, но с intellisense не проблема при вводе. также есть другие фрагменты кода для Rhino Mocks, поэтому полное определение имени упрощает их визуальную группировку
Ярлык: 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 Test Unit с использованием синтаксиса AAA и соглашения об именах, найденного в Искусство модульного тестирования
Ярлык: тестирование (или tst, или как хотите)
Доступно в: Файлы C# 2.0+, в которых разрешено объявление члена типа
[TestMethod]
public void $MethodName$_$StateUnderTest$_$ExpectedBehavior$()
{
// Arrange
$END$
// Act
// Assert
}
Свойства макроса (при наличии):
Блок конфигурации XML log4net
Вы можете напрямую импортировать шаблон:
<TemplatesExport family = "Live Templates">
<Template uid = "49c599bb-a1ec-4def-a2ad-01de05799843" shortcut = "log4" description = "inserts log4net XML configuration block" text = " <configSections>
 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
 </configSections>

 <log4net debug="false">
 <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
 <param name="File" value="logs\$LogFileName$.log" />
 <param name="AppendToFile" value="false" />
 <param name="RollingStyle" value="Size" />
 <param name="MaxSizeRollBackups" value="5" />
 <param name="MaximumFileSize" value="5000KB" />
 <param name="StaticLogFileName" value="true" />

 <layout type="log4net.Layout.PatternLayout">
 <param name="ConversionPattern" value="%date [%3thread] %-5level %-40logger{3} - %message%newline" />
 </layout>
 </appender>

 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
 <layout type="log4net.Layout.PatternLayout">
 <param name="ConversionPattern" value="%message%newline" />
 </layout>
 </appender>

 <root>
 <priority value="DEBUG" />
 <appender-ref ref="LogFileAppender" />
 </root>
 </log4net>
" reformat = "False" shortenQualifiedReferences = "False">
<Context>
<FileNameContext mask = "*.config" />
</Context>
<Categories />
<Variables>
<Variable name = "LogFileName" expression = "getOutputName()" initialRange = "0" />
</Variables>
<CustomProperties />
</Template>
</TemplatesExport>
Создает новый экземпляр System.Guid, инициализированный новым сгенерированным значением guid
Ярлык: csguid Доступно в: в файлах C# 2.0+
new System.Guid("$GUID$")
Свойства макроса:
Последние версии ReSharper теперь по умолчанию включают ярлык nguid.
Верно, но он генерирует только значение guid, а не инициализирует тип в C#.
(если вы устали постоянно вводить длинную стандартную сводку для каждого конструктора, чтобы она соответствовала правилу StyleCop SA1642)
Ярлык: csum
Доступно в: C# 2.0+
Initializes a new instance of the <see cref = "$classname$"/> class.$END$
Макросы:
Так просто, так полезно - небольшая лямбда:
Ярлык: x
Доступный: C#, где разрешено выражение.
x => x.$END$
Макросы: нет.
Если вы используете .Net 4, вы можете предпочесть использовать string.IsNullOrWhiteSpace ().
Ярлык: sne
Доступно в: C# 2.0+, где разрешено выражение.
string.IsNullOrEmpty($VAR$)
Свойства макроса:
Это мой любимый вариант, потому что я часто им пользуюсь, и он выполняет для меня много работы.
Ярлык: npc
Доступно в: C# 2.0+, где разрешено выражение.
if (value != _$LOWEREDMEMBER$)
{
_$LOWEREDMEMBER$ = value;
NotifyPropertyChanged("$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
Приостановить ввод данных пользователем перед завершением консольного приложения.
Ярлык: пауза
Доступно в: Файлы C# 2.0+, где разрешен оператор
System.Console.WriteLine("Press <ENTER> to exit...");
System.Console.ReadLine();$END$
Я бы использовал Console.ReadKey(true); и позволял нажимать любую клавишу.
Добавляет виртуальное ключевое слово. Особенно полезно при использовании 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$
Ярлык: фм
Доступно в: Файлы C# 2.0+, где разрешен оператор
.ForMember(d => d$property$, o => o.MapFrom(s => s$src_property$))
$END$
Макросы:
Примечание:
Я оставляю лямбда-«точку» выключенной, чтобы я мог ударить. немедленно и получить недвижимость 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;
}
Свойства макроса:
Должен ли это быть на программисты.SE, потому что это субъективно?