您使用什么ReSharper 4+ C#的实时模板?

时间:2008-10-09 12:07:43

标签: c# templates refactoring resharper

您使用 C#的ReSharper 4.0模板?

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


[标题]

可选说明

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

// Resharper template code snippet
// comes here

宏属性(如果存在):

  • Macro1 - 值 - EditableOccurence
  • Macro2 - 值 - EditableOccurence

36 个答案:

答案 0 :(得分:30)

简单Lambda

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

快捷方式:x

可用:C#,其中允许表达式。

x => x.$END$

宏:无。

答案 1 :(得分:22)

实施'Dispose(bool)'方法

实施Joe Duffy's Dispose Pattern

快捷方式:处置

适用于:允许使用类型成员声明的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
  • CLASS - 包含类型名称

答案 2 :(得分: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

答案 3 :(得分:13)

检查字符串是空还是空。

如果你使用的是.Net 4,你可能更喜欢使用string.IsNullOrWhiteSpace()。

快捷方式:sne

可在中使用:C#2.0+,其中允许表达式。

string.IsNullOrEmpty($VAR$)

宏属性

  • VAR - 建议一个string类型的变量。 Editible = true。

答案 4 :(得分:11)

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

捷径: ntc
适用于:允许使用类型成员声明的C#2.0+文件

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

<强>宏:

  • 测试 - 无 - V

答案 5 :(得分:10)

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

快捷方式:日志

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

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

宏属性

  • TYPE - 包含类型名称

答案 6 :(得分:9)

MS测试单元测试

使用AAA语法和Art Of Unit Testing

中的命名约定进行新的MS测试单元测试

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

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

    // Act


    // Assert

}

宏属性(如果存在):

  • MethodName - 待测方法的名称
  • StateUnderTest - 您要测试的州
  • ExpectedBehavior - 您期望发生的事情

答案 7 :(得分:8)

检查变量是否为空

快捷方式: ifn
适用于: C#2.0+文件

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

检查变量是否为空

快捷方式: ifnn
适用于: C#2.0+文件

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

答案 8 :(得分:7)

为类构造函数

编写符合StyleCop的摘要

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

快捷方式: csum

适用于: C#2.0 +

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

<强>宏:

  • classname - 包含类型名称 - V

答案 9 :(得分:7)

<强> Assert.AreEqual

将断言添加到单元测试的简单模板

快捷方式:ae
中可用:在C#2.0+文件中允许使用语句

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

流利版:

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

答案 10 :(得分:7)

很多Lambdas

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

快捷方式: la,lb,lc

适用于:允许使用表达式或查询子句的C#3.0+文件

la 定义为:

x => x.$END$

lb 定义为:

y => y.$END$

lc 定义为:

z => z.$END$

这与上面的Sean Kearon类似,不同之处在于我定义了多个lambda live模板以便于lambdas的嵌套。 “ la ”是最常用的,但其他一些在处理这样的表达式时很有用:

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

答案 11 :(得分:6)

等待......

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

快捷方式:暂停

适用于: C#2.0+文件允许使用语句

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

答案 12 :(得分: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 - 包含类型名称 - 无可编辑的出现

答案 13 :(得分:5)

通知属性已更改

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

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

实际上,我使用的这个版本是基于lambda的('我喜欢我的lambdas!)并生成以下内容。原则与上述原则相同。

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

当我没有使用非常优雅和有用的PostSharp to do the whole INotifyPropertyChanged thing for no effort时,就是这样。

答案 14 :(得分:5)

AutoMapper属性映射

快捷方式: fm

适用于: C#2.0+文件允许使用语句

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

<强>宏:

  • property - editable occurrence
  • src_property - 可编辑的事件

注意:

我将lambda“dot”关闭,以便我可以击中。立即获得属性intellisense。   需要AutoMapper(http://automapper.codeplex.com/)。

答案 15 :(得分:5)

Quick ExpectedException Shortcut

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

快捷方式:ee

可在中使用:适用于:允许使用类型成员声明的C#2.0+文件

[ExpectedException(typeof($TYPE$))]

答案 16 :(得分:4)

NUnit拆解方法

捷径:拆解
适用于:适用于:允许使用类型成员声明的C#2.0+文件

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

答案 17 :(得分:4)

NUnit设置方法

快捷方式:设置
适用于:适用于:允许使用类型成员声明的C#2.0+文件

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

答案 18 :(得分:4)

MSTest测试方法

这有点蹩脚,但它很有用。希望有人能从中得到一些实用工具。

快捷方式:testMethod

适用于:C#2.0

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

    //Arrange.

    //Act.

    //Assert.
}

$END$

答案 19 :(得分:4)

如果需要则调用

在开发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
    // ...
}

答案 20 :(得分:4)

新C#Guid

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

快捷方式: csguid 在C#2.0+文件中提供

new System.Guid("$GUID$")

宏属性

  • GUID - 新GUID - 错误

答案 21 :(得分:4)

为NUnit创建测试用例存根

这个可以作为提示(实现或测试的功能),显示在单元测试运行器中(与任何其他被忽略的测试一样),

捷径: nts
适用于:允许使用类型成员声明的C#2.0+文件

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

答案 22 :(得分:3)

Assert Invoke Not Required

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

快捷方式:ani

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

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

<强>宏

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

答案 23 :(得分:3)

新COM类

快捷方式:comclass

可在中使用:C#2.0+文件,其中允许使用类型成员声明或名称空间声明

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

<强>宏

  • GUID - 新GUID
  • NAME - 可编辑
  • 接口 - 可编辑

答案 24 :(得分:3)

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

捷径: eann
适用于:允许使用type语句的C#2.0+文件

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

<强>宏:

  • 内部 - 建议参数 - #1

<强>说明: 虽然此代码段针对开源.NET Lokad.Shared库,但它可以很容易地适应任何其他类型的参数检查。

答案 25 :(得分:2)

Trace - Writeline,格式为

使用格式化字符串添加跟踪的非常简单的模板(如Debug.WriteLine支持)。

快捷方式: twlf
适用于:允许声明的C#2.0+文件

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

宏属性:

  • 参数 - value - EditableOccurence
  • 面具 - "{0}" - EditableOccurence

答案 26 :(得分:1)

制作方法虚拟

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

快捷方式: v

适用于: C#2.0+文件,其中允许使用类型成员声明

virtual $END$

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

public |string Name { get; set; }

答案 27 :(得分:1)

等于

一般的.NET和默认的“equals”模板都不会让一个好的,简单的Equals方法变得容易。虽然there are many thoughts关于如何编写好的Equals方法,但我认为以下内容足以满足90%的简单案例。对于任何更复杂的事情 - 特别是在继承方面 - 可能会更好to not use Equals at all

快捷方式:等于
适用于: 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;
}

宏属性

  • TYPE - 包含类型名称 - 不可编辑

答案 28 :(得分: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>

答案 29 :(得分: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>

等...

答案 30 :(得分:1)

新的Typemock隔离器假冒

快捷方式:假的 可在中使用:[在允许声明的c#2.0文件中]

$ TYPE $ $ Name $ Fake = Isolate.Fake.Instance();
Isolate.WhenCalled(()=&gt; $ Name $ Fake。)

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

答案 31 :(得分:0)

借鉴Drew Noakes的优点,这里是Silverlight调用的实现。

快捷方式:dca

适用于:C#3.0文件

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

$END$

<强>宏

  • $METHOD_NAME$当前包含方法的不可编辑名称。

答案 32 :(得分:0)

Machine.Specifications - 因为

作为一个沉重的mspec用户,我有几个专门用于MSpec的实时模板。这是一个快速的设置因为并捕获错误。

捷径: bece
可用于: C#2.0+文件,其中允许使用类型成员声明或名称空间声明

bece - 因为(有例外捕获)

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

答案 33 :(得分:0)

Rhino Mocks Expect Methods

快捷方式:RhinoMocksExpectMethod

适用于: C#2.0+文件

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

快捷方式:RhinoMocksExpectVoidMethod

适用于: C#2.0+文件

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

答案 34 :(得分:0)

Rhino Mocks Record-Playback Syntax

快捷方式:RhinoMocksRecordPlaybackSyntax *

适用于: C#2.0+文件

注意:此代码段依赖于已在其他位置声明和初始化的MockRepository(var mocks = new new MockRepository();)。

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

using (mocks.Playback())
{

}

*对于快捷方式名称可能看起来有点长,但在输入时intellisense不是问题。还有其他Rhino Mocks的代码片段,因此完全限定名称可以更容易地将它们组合在一起

答案 35 :(得分:0)

Machine.Specifications - 它

快捷方式:

适用于: C#2.0+文件,其中允许使用类型成员声明或名称空间声明

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

    };

宏属性(如果存在):

  • 应_ - (无宏) - EditableOccurence