¿Qué plantillas en vivo de ReSharper 4+ para C # usas? [cerrado]


94

¿Qué plantillas de ReSharper 4.0 para C # usas?

Compartamos estos en el siguiente formato:


[Título]

Descripción opcional

Atajo: atajo
Disponible en: [AvailabilitySetting]

// Resharper template code snippet
// comes here

Propiedades de macros (si están presentes):

  • Macro1 - Valor - Precisión editable
  • Macro2 - Valor - Precisión editable


¿Debería estar en los programadores. SE porque es subjetivo?
Timwi

Esta pregunta no es constructiva y hay mucha información sobre las plantillas en vivo de resharper y las plantillas de Visual Studio. programmingsolved.blogspot.com/2014/04/snippet-away.html
Thulani Chivandikwa

Respuestas:


31

Lambda simple

Tan simple, tan útil, un pequeño lambda:

Atajo : x

Disponible : C # donde se permite la expresión.

x => x.$END$

Macros: ninguna.


22

Implementar el método 'Dispose (bool)'

Implementar el patrón de eliminación de Joe Duffy

Atajo: desechar

Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

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;

Propiedades de macros :

  • MIEMBRO - Sugerir variable de System.IDisposable - Ocurrencia editable # 1
  • CLASE : contiene el nombre del tipo

14

Crear un nuevo dispositivo de prueba de unidad para algún tipo

Acceso directo: ntf
Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo o la declaración de espacio de nombres

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

Macros:

  • TypeToTest - ninguno - # 2
  • Prueba - ninguna - V

13

Compruebe si una cadena es nula o está vacía.

Si está utilizando .Net 4, es posible que prefiera utilizar string.IsNullOrWhiteSpace ().

Atajo : sne

Disponible en : C # 2.0+ donde se permite la expresión.

string.IsNullOrEmpty($VAR$)

Propiedades macro :

  • VAR: sugiere una variable de tipo cadena. Editable = verdadero.

11

Crear un nuevo caso de prueba de unidad independiente

Acceso directo: ntc
Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

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

Macros:

  • Prueba - ninguna - V

10

Declare un registrador log4net para el tipo actual.

Atajo: registro

Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

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

Propiedades de macros :

  • TYPE : contiene el nombre del tipo

Con re-sharper, ¿por qué no usar esto? privado estático de solo lectura ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); con $ CurrType $: Contiene el nombre del tipo
Henrik

Porque si cambio el nombre del tipo más adelante, también tendría que actualizar esa línea de código. El mío es más dinámico.
Chris Brandsma

ReSharper cambia automáticamente el nombre de todas las instancias de un nombre de tipo. GetType () también es más lento.
Richard Dingwall

9

Prueba de unidad de prueba de MS

Nueva prueba MS Test Unit con sintaxis AAA y la convención de nomenclatura que se encuentra en Art Of Unit Testing

Acceso directo: prueba (o tst, o lo que desee)
Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

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

    // Act


    // Assert

}

Propiedades de macros (si están presentes):

  • MethodName : el nombre del método bajo prueba
  • StateUnderTest : el estado que está intentando probar
  • Comportamiento esperado : lo que espera que suceda

8

Compruebe si la variable es nula

Acceso directo: ifn
Disponible en: archivos C # 2.0+

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

Compruebe si la variable no es nula

Acceso directo: ifnn
Disponible en: archivos C # 2.0+

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

15
¿Cómo te trató esa transición de C ++ a C #?
Ty.

Va bien con 'Ejecutar finalización inteligente' como macro para $ var $
mklein

Buenas "Condiciones de Yoda" !! ... imprudente esta forma de codificación es ;-))
bytedev

7

Escriba un resumen compatible con StyleCop para el constructor de clases

(si está cansado de escribir constantemente un resumen estándar largo para cada constructor para que cumpla con la regla StyleCop SA1642)

Atajo: csum

Disponible en: C # 2.0+

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

Macros:

  • classname : contiene el nombre del tipo: V

7

Assert.AreEqual

Plantilla simple para agregar afirmaciones a una prueba unitaria

Acceso directo : ae
Disponible en : en archivos C # 2.0+ donde se permite la declaración

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

Versión fluida:

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

7

Muchas Lambdas

Cree una expresión lambda con una declaración de variable diferente para facilitar el anidamiento.

Atajo: la, lb, lc

Disponible en: archivos C # 3.0+ donde se permite la expresión o cláusula de consulta

la se define como:

x => x.$END$

lb se define como:

y => y.$END$

lc se define como:

z => z.$END$

Esto es similar a Sean Kearon anterior, excepto que defino múltiples plantillas lambda en vivo para anidar fácilmente lambdas. " la " es el más utilizado, pero otros son útiles cuando se trata de expresiones como esta:

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

¿Está bien usar nombres x, y para argumentos lambda? si tiene lambdas anidadas de dos a tres niveles, probablemente no desee memorizar lo que significa x, y, z en cada nivel. Teniendo en cuenta su ejemplo, iría con items.ForEach (item => ... y item.Children.ForEach (child => ... para que al final tuviera child.Name en lugar de y.Name. No No creo que la asignación de nombres a los argumentos lambdas se pueda tratar de manera similar a los índices de bucle for i, j, k
Ilya Ivanov

6

Espéralo ...

Haga una pausa para la entrada del usuario antes de que finalice una aplicación de consola.

Atajo: pausa

Disponible en: archivos C # 2.0+ donde se permite la declaración

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

Yo usaría Console.ReadKey(true);y permitiría presionar cualquier tecla.
MasterMastic

6

Generación de propiedades de dependencia

Genera una propiedad de dependencia

Atajo: dp
Disponible en: C # 3.0 donde se permite la declaración de miembros

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$

Propiedades de macros (si están presentes):

PropertyName - Sin macro - # 3
PropertyType - Adivina el tipo esperado en este punto - # 2
OwnerType - Contiene el nombre del tipo - sin ocurrencia editable


5

Notificar cambio de propiedad

Este es mi favorito porque lo uso a menudo y me resulta muy útil.

Atajo : npc

Disponible en : C # 2.0+ donde se permite la expresión.

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

Macros :

  • MIEMBRO: contiene el nombre del tipo de miembro. No editable. Nota: asegúrese de que este sea el primero en la lista.
  • LOWEREDMEMBER: valor de MEMBER con el primer carácter en minúsculas. No editable.

Uso : Dentro de un establecedor de propiedades como este:

private string _dateOfBirth;
public string DateOfBirth
{
   get { return _dateOfBirth; }
   set
   {
      npc<--tab from here
   }
}

Asume que su variable de respaldo comienza con un "_". Reemplaza esto con lo que uses. También asume que tiene un método de cambio de propiedad similar a este:

private void NotifyPropertyChanged(String info)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(info));
   }
}

En realidad, la versión de esto que uso está basada en lambda (¡porque me encantan mis lambdas!) Y produce lo siguiente. Los principios son los mismos que los anteriores.

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

Ahí es cuando no estoy usando PostSharp extremadamente elegante y útil para hacer todo el proceso de INotifyPropertyChanged sin esfuerzo , es decir.


5

Atajo rápido de excepción esperada

Solo un atajo rápido para agregar a mis atributos de prueba unitaria.

Atajo : ee

Disponible en : Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

[ExpectedException(typeof($TYPE$))]

Solo una nota rápida de que ha sido una versión de pareja ahora que ExpectedException ha quedado obsoleto en NUnit a favor del uso de Assert.Throws <>
Stécy

Sí, por favor, todos dejen de usar ExpectedExceptionAttribute, todavía veo a los desarrolladores que usan MSTest y lo usan incluso hoy :-(
bytedev

5

Asignación de propiedades de AutoMapper

Atajo: fm

Disponible en: archivos C # 2.0+ donde se permite la declaración

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

Macros:

  • propiedad - ocurrencia editable
  • src_property - ocurrencia editable

Nota:

Dejo el "punto" lambda apagado para poder golpear. inmediatamente y obtener propiedad intellisense. Requiere AutoMapper ( http://automapper.codeplex.com/ ).


4

Crear código auxiliar de caso de prueba para NUnit

Este podría servir como un recordatorio (de la funcionalidad para implementar o probar) que aparece en el corredor de pruebas unitarias (como cualquier otra prueba ignorada),

Acceso directo: nts
Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

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

Hago una variación de esto, pero con Assert.Fail () explícito en el cuerpo: aleriel.com/blog/2010/04/07/replace-paper-with-unit-tests
Adam Lear

4

Invocar si es necesario

Útil cuando se desarrollan aplicaciones de WinForms en las que un método debe poder llamarse desde subprocesos que no son de la interfaz de usuario, y ese método debe luego asignar la llamada al subproceso de la interfaz de usuario.

Atajo : inv

Disponible en : Se permite la declaración de archivos C # 3.0+

if (InvokeRequired)
{
    Invoke((System.Action)delegate { $METHOD_NAME$($END$); });
    return;
}

Macros

  • METHOD_NAME : contiene el nombre del miembro del tipo

Normalmente usaría esta plantilla como la primera declaración en un método dado y el resultado es similar a:

void DoSomething(Type1 arg1)
{
    if (InvokeRequired)
    {
        Invoke((Action)delegate { DoSomething(arg1); });
        return;
    }

    // Rest of method will only execute on the correct thread
    // ...
}

4

Nueva guía de C #

Genera una nueva instancia de System.Guid inicializada a un nuevo valor de guid generado

Acceso directo: csguid Disponible en: en archivos C # 2.0+

new System.Guid("$GUID$")

Propiedades de macros :

  • GUID - Nuevo GUID - Falso

Las versiones recientes de ReSharper ahora incluyen el acceso directo nguid por defecto.
Jamie Keeling

Es cierto, pero solo genera un valor guid, no inicializa el tipo en C #.
codekaizen

4

Método de prueba MSTest

Esto es un poco escaso pero útil. Con suerte, alguien obtendrá algo de utilidad.

Atajo: testMethod

Disponible en: C # 2.0

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

    //Arrange.

    //Act.

    //Assert.
}

$END$

4

Método de configuración de NUnit

Acceso directo: configuración
Disponible en: Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

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

Buen punto. Puedo pensar en algunos casos en los que es posible que desee subclasificar dispositivos de prueba (tal vez si quisiera escribir pruebas de "contrato" donde un conjunto de afirmaciones debería aplicarse a varios objetos), pero creo que en el caso mucho más común, virtual es superfluo. Lo editaré.
paraquat

Una mejora a esto ............ private $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }
bytedev

4

Método de desmontaje de NUnit

Acceso directo: desmontaje
Disponible en: Disponible en: archivos C # 2.0+ donde se permite la declaración de miembro de tipo

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

3

Cree una verificación de cordura para asegurarse de que un argumento nunca sea nulo

Acceso directo: eann
Disponible en: archivos C # 2.0+ donde se permite la declaración de tipo

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

Macros:

  • inner - Sugerir parámetro - # 1

Observaciones: aunque este fragmento se dirige a la biblioteca de código abierto .NET Lokad.Shared , podría adaptarse fácilmente a cualquier otro tipo de verificación de argumentos.


3

Nueva clase COM

Atajo : comclass

Disponible en : archivos C # 2.0+ donde se permite la declaración de miembro de tipo o la declaración de espacio de nombres

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

Macros

  • GUID : nuevo GUID
  • NAME : editable
  • INTERFAZ - Editable

2
Bonita plantilla, pero podría ser más adecuada para una plantilla de archivo que para una plantilla en vivo.
Drew Noakes

3

Assert Invoke No Required

Útil cuando se desarrollan aplicaciones de WinForms en las que desea asegurarse de que el código se esté ejecutando en el hilo correcto para un elemento determinado. Tenga en cuenta que Controlimplements ISynchronizeInvoke.

Atajo : ani

Disponible en : Se permite la declaración de archivos C # 2.0+

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

Macros

  • SYNC_INVOKE - Sugerir variable deSystem.ComponentModel.ISynchronizeInvoke

2

Trace - Writeline, con formato

Plantilla muy simple para agregar un rastro con una cadena formateada (como ya es compatible con Debug.WriteLine).

Acceso directo: twlf
Disponible en: archivos C # 2.0+ donde se permite la declaración

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

Propiedades de macros:

  • Argumento - value- EditableOccurence
  • Máscara - "{0}"- EditableOccurence

1

Nuevo aislador Typemock falso

Atajo : falso
Disponible en : [en archivos c # 2.0 donde se permite la declaración]

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

Propiedades de las macros:
* $ TYPE $ - Sugerir tipo para una nueva variable
* $ Name $ - Valor de otra variable ( Tipo ) con el primer carácter en minúsculas


1

Como estoy trabajando con Unity en este momento, se me han ocurrido algunos para hacer mi vida un poco más fácil:


Tipo de alias

Atajo : ta
Disponible en : * .xml; * .config

<typeAlias alias="$ALIAS$" type="$TYPE$,$ASSEMBLY$"/>

Declaración de tipo

Este es un tipo sin nombre y sin argumentos

Atajo : tp
Disponible en : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$"/>

Declaración de tipo (con nombre)

Este es un tipo con nombre y sin argumentos

Atajo : tn
Disponible en : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$" name="$NAME$"/>

Declaración de tipo con constructor

Este es un tipo con nombre y sin argumentos

Atajo : tpc
Disponible en : * .xml; * .config

<type type="$TYPE$" mapTo="$MAPTYPE$">
  <typeConfig>
    <constructor>
        $PARAMS$
    </constructor>
  </typeConfig>
</type>

etc ....


1

Bloque de configuración XML log4net

Puede importar la plantilla directamente:

<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

Hacer que el método sea virtual

Agrega una palabra clave virtual. Especialmente útil cuando se usa NHibernate, EF o un marco similar donde los métodos y / o propiedades deben ser virtuales para permitir la carga diferida o el proxy.

Atajo: v

Disponible en: archivo C # 2.0+ donde se permite la declaración de miembro de tipo

virtual $END$

El truco aquí es el espacio después de virtual, que puede ser difícil de ver arriba. La plantilla real es "virtual $ END $" con el código de reformateo habilitado. Esto le permite ir al punto de inserción a continuación (indicado por |) y escribir v:

public |string Name { get; set; }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.