您使用哪些适用于 C# 的 ReSharper 4+ 实时模板

本文关键字:ReSharper 实时 适用于 | 更新日期: 2023-09-27 17:47:22

您使用哪些用于 C# 的 ReSharper 4.0 模板?

让我们以以下格式分享这些内容:


[标题]

可选说明

快捷方式:快捷方式
可用: [可用性设置]

// Resharper template code snippet
// comes here

宏属性(如果存在):

  • 宏 1 - 值 - 可编辑发生
  • 宏 2 - 值 - 可编辑发生

  • 请为每个答案提供一个宏!
  • 下面是 NUnit 测试
  • 夹具和独立 NUnit 测试用例的一些示例,它们以建议的格式描述实时模板。

您使用哪些适用于 C# 的 ReSharper 4+ 实时模板

Simple Lambda

如此

简单,如此有用 - 一点点 lambda:

快捷键: x

可用:允许表达式的 C#。

x => x.$END$

宏:无。

实现 'Dispose(bool)' 方法

实现 Joe Duffy 的处置模式

快捷方式:处置

可用:允许类型成员声明的 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;

宏属性

  • 成员 - 建议系统变量.ID是可编辑的 - 可编辑的发生 #1
  • - 包含类型名称

为某种类型创建新的单元测试夹具

快捷键:NTF
提供:允许类型成员声明或命名空间声明的 C# 2.0+ 文件

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

宏:

  • 类型到测试 - 无 - #2
  • 测试 - 无 - V

检查字符串是空还是空。

如果您使用的是 .Net 4,您可能更喜欢使用字符串。IsNullOrWhiteSpace().

快捷键:sne

在以下版本中可用:允许表达式的 C# 2.0+。

string.IsNullOrEmpty($VAR$)

宏属性

  • VAR - 建议字符串类型的变量。可编辑 = 真。

创建新的独立单元测试用例

快捷键:NTC
提供:允许类型成员声明的 C# 2.0+ 文件

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

宏:

  • 测试 - 无 - V

为当前类型声明一个 log4net 记录器。

快捷方式:日志

可用:允许类型成员声明的 C# 2.0+ 文件

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

宏属性

    类型
  • - 包含类型名称

MS 测试单元测试

新的 MS 测试单元测试使用 AAA 语法和单元测试艺术中的命名约定

快捷方式:测试(或tst,或任何你想要的)
提供:允许类型成员声明的 C# 2.0+ 文件

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

    // Assert
}

宏属性(如果存在):

  • 方法名称 - 受测方法的名称
  • 状态测试下 - 您尝试测试的状态
  • 预期行为 - 预期发生的情况

检查变量是否为空

快捷键:ifn
提供:C# 2.0+ 文件

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

检查变量是否不为空

快捷方式:ifnn
提供:C# 2.0+ 文件

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

为类构造函数编写符合 StyleCop 的摘要

(如果您厌倦了为每个构造函数不断键入长标准摘要,因此它符合 StyleCop 规则 SA1642)

快捷方式:csum

可用版本:C# 2.0+

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

宏:

  • 类名 - 包含类型名 - V

Assert.AreEqual

用于向单元测试添加断言的简单模板

快捷键:ae
可用于:在允许语句的 C# 2.0+ 文件中

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

流利版本:

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

很多 lambda

使用不同的变量声明创建 lambda 表达式,以便于嵌套。

快捷键: la, lb, lc

在以下版本中可用:允许表达式或查询子句的 C# 3.0+ 文件

LA 定义为:

x => x.$END$

LB 定义为:

y => y.$END$

LC定义为:

z => z.$END$

这与上面的 Sean Kearon 类似,除了我定义了多个 lambda 实时模板以便轻松嵌套 lambda。"la"是最常用的,但在处理这样的表达式时,其他表达式很有用:

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

等待它...

在控制台应用程序结束之前暂停用户输入。

快捷方式:暂停

可用:允许语句的 C# 2.0+ 文件

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

依赖属性生成

生成依赖项属性

快捷方式: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$

宏属性(如果存在):

属性名称 - 无宏 - #3
属性类型 - 此时预期的猜测类型 - #2
所有者类型 - 包含类型名称 - 没有可编辑的匹配项

通知属性已更改

这是我最喜欢的,因为我经常使用它,它为我做了很多工作。

快捷方式: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));
   }
}

实际上,我使用的版本是基于lambda的('cos I loves my lambdas!)并产生以下内容。 原则与上述相同。

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

那时我不会使用非常优雅和有用的PostSharp来不费吹灰之力地完成整个INotifyPropertyChanged的事情。

快速预期异常快捷方式

只是添加到我的单元测试属性的快速快捷方式。

快捷方式:ee

可用:可用:允许类型成员声明的 C# 2.0+ 文件

[ExpectedException(typeof($TYPE$))]

自动映射器属性映射

快捷键:调频

可用:允许语句的 C# 2.0+ 文件

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

Macros:

  • property - editable occurrence
  • src_property - editable occurrence

Note:

I leave the lambda "dot" off so that I can hit . immediately and get property intellisense. Requires AutoMapper (http://automapper.codeplex.com/).

Create test case stub for NUnit

This one could serve as a reminder (of functionality to implement or test) that shows up in the unit test runner (as any other ignored test),

Shortcut: nts
Available in: C# 2.0+ files where type member declaration is allowed

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

如果需要,请调用

在开发 WinForms 应用程序时很有用,其中方法应可从非 UI 线程调用,然后该方法应将调用封送到 UI 线程。

快捷键: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
    // ...
}

新的 C# 指导

生成初始化为新生成的 guid 值的新 System.Guid 实例

快捷键:CSGUID可用:在 C# 2.0+ 文件中

new System.Guid("$GUID$")

宏属性

  • GUID - 新图形用户界面 - 假

MSTest Test Method

这有点蹩脚,但它很有用。 希望有人能从中获得一些效用。

快捷方式:测试方法

可用版本:C# 2.0

[TestMethod]
public void $TestName$()
{
    throw new NotImplementedException();
    //Arrange.
    //Act.
    //Assert.
}
$END$

NUnit Setup 方法

快捷方式:设置
提供:可用:允许类型成员声明的 C# 2.0+ 文件

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

NUnit 拆解法

快捷方式:拆解
提供:可用:允许类型成员声明的 C# 2.0+ 文件

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

创建健全性检查以确保参数永远不会为空

快捷键:伊恩
提供:允许类型语句的 C# 2.0+ 文件

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

宏:

  • 内部 - 建议参数 - #1

言论:尽管此代码段面向开源 .NET Lokad.Shared 库,但它可以很容易地适应任何其他类型的参数检查。

New COM class

快捷键:共类

在以下版本中可用:允许类型成员声明或命名空间声明的 C# 2.0+ 文件

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

  • GUID - 新图形用户界面
  • 名称 - 可编辑
  • 界面 - 可编辑
不需要断

言调用

在开发 WinForms 应用程序时很有用,您希望确保代码在给定项的正确线程上执行。 请注意,Control实现ISynchronizeInvoke

快捷键:阿尼

可用:允许 C# 2.0+ 文件语句

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

  • SYNC_INVOKE - 建议System.ComponentModel.ISynchronizeInvoke变量

跟踪 - 写行,带格式

非常简单的模板,用于添加带有格式化字符串的跟踪(如Debug.WriteLine已经支持)。

快捷键:twlf
提供:允许语句的 C# 2.0+ 文件

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

宏属性:

  • 参数 - value - 可编辑发生
  • 蒙版 - "{0}" - 可编辑发生

新类型模拟隔离器 假

快捷方式:假
在以下版本中可用:[在允许语句的 C# 2.0 文件中]

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

宏属性:
* $TYPE$ - 建议新变量
的类型 * $Name$ - 第一个字符为小写的另一个变量Type)的值

由于我现在正在使用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>

等。。。。

log4net XML Configuration Block

您可以直接导入模板:

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

使方法虚拟

添加虚拟关键字。在使用 NHibernate、EF 或类似框架时特别有用,其中方法和/或属性必须是虚拟的才能启用延迟加载或代理。

快捷键:v

可用:允许类型成员声明的 C# 2.0+ 文件

virtual $END$

这里的诀窍是虚拟之后的空间,这可能很难在上面看到。实际模板是启用了重新格式化代码的"虚拟$END$"。这允许您转到下面的插入点(用 |表示)并键入 v:

public |string Name { get; set; }