您使用什么C#ReSharper 4+实时模板?[关闭]


94

您使用什么C# ReSharper 4.0模板?

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


[标题]

可选说明

快捷方式:快捷方式
可用于: [AvailabilitySetting]

// Resharper template code snippet
// comes here

宏属性(如果存在):

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


如果这是在programmers.SE,而不是因为它是主观的?
Timwi

这个问题不是建设性的,并且有很多有关重新共享实时模板和Visual Studio模板的信息。programmingsolved.blogspot.com/2014/04/snippet-away.html
Thulani Chivandikwa 2014年

Answers:


31

简单的Lambda

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

捷径:x

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

x => x.$END$

宏:无。


22

实现'Dispose(bool)'方法

实现Joe Duffy的Dispose模式

快捷方式:处理

在以下类型中可用:允许类型成员声明的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-包含类型名称

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,则可能更喜欢使用string.IsNullOrWhiteSpace()。

捷径:sne

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

string.IsNullOrEmpty($VAR$)

宏属性

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

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 $)); 与$ CurrType $:包含类型名称
Henrik

因为如果以后更改类型名称,则也必须更新该行代码。我的更有活力。
克里斯·布兰德斯玛

ReSharper会自动重命名类型名称的所有实例。GetType()也较慢。
理查德·丁沃尔

9

MS测试单元测试

使用AAA语法和Art Of Unit Testing中的命名约定的新MS Test Unit测试

快捷方式:测试(或tst或任何您想要的东西)
在以下位置可用:允许类型成员声明的C#2.0+文件

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

    // Act


    // Assert

}

宏属性(如果存在):

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

8

检查变量是否为空

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

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

检查变量是否不为空

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

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

15
从C ++到C#的过渡如何对待您?
Ty。

很好,带有“执行智能完成”作为$ var $的宏
mklein 2012年

不错的“尤达条件”!...这是不明智的编码方式;
bytedev

7

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

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

快捷方式: csum

可在: C#2.0+

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

巨集:

  • 类名 -包含类型名-V

7

断言等于

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

快捷方式:ae适用
:允许语句的C#2.0+文件中

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

流利的版本:

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

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模板以方便嵌套lambda。“ la ”是最常用的,但是在处理这样的表达式时其他有用:

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

可以将x,y名称用作lambda参数吗?如果您有两层到三层的嵌套lambda,则可能不想记住x,y,z在每一层的含义。考虑到您的示例,我将使用items.ForEach(item => ...和item.Children.ForEach(child => ... ...这样一来,最后我将使用child.Name而不是y.Name。我认为为lambdas参数命名可以与for循环索引i,j,k类似地对待
Ilya Ivanov

6

等等...

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

快捷方式:暂停

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

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

我会使用Console.ReadKey(true);,并允许按下任何键。
2013年

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));
   }
}

实际上,我使用的此版本基于lambda('cos我爱我的lambdas!)并生成以下内容。原理与上述相同。

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$))]

只是一个快速的注意,它已经现在几个版本的ExpectedException已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-可编辑的出现

注意:

我将lambda的“点”保留下来,以便打中。立即获得财产智能感知。需要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
Adam Lear

4

根据需要调用

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

快捷方式:inv

适用于:允许使用C#3.0+ files语句

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

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

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

new System.Guid("$GUID$")

宏属性

  • GUID-新的GUID-错误

ReSharper的最新版本现在默认包含nguid快捷方式。
Jamie Keeling

是的,但是它仅生成一个guid值,而不初始化C#中的类型。
codekaizen 2015年

4

MSTest测试方法

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

快捷方式:testMethod

适用于:C#2.0

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

    //Arrange.

    //Act.

    //Assert.
}

$END$

4

NUnit设置方法

快捷方式: setup
可用于:可用于:允许类型成员声明的C#2.0+文件

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

好点子。我可以想到某些情况下,您可能希望将测试装置子类化(例如,如果您想编写将一组断言应用于多个对象的“合同”测试),但是我认为在更常见的情况下,虚拟是多余的。我将其删除。
百草枯

对此的改进..........私有$ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp(){_classUnderTest = new $ classUnderTestType $($ END $); }
bytedev

4

NUnit拆解方法

快捷方式:拆解适用
于:适用于:允许类型成员声明的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
  • NAME-可编辑
  • 接口 -可编辑

2
漂亮的模板,但是它可能更适合于文件模板而不是实时模板。
德鲁·诺阿克斯

3

不需要断言

在开发WinForms应用程序时非常有用,在该应用程序中您要确保代码在给定项目的正确线程上执行。注意Control实现ISynchronizeInvoke

捷径:ani

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

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

巨集

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

2

跟踪-Writeline,格式

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

快捷方式: twlf适用
于:允许使用语句的C#2.0+文件

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

宏属性:

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

1

新型Typemock隔离器假货

快捷方式:false
可用于:[在允许语句的c#2.0文件中]

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

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


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; }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.