Z jakich aktywnych szablonów ReSharper 4+ dla C # używasz? [Zamknięte]

94

Jakich szablonów ReSharper 4.0 dla C # używasz?

Udostępnijmy je w następującym formacie:


[Tytuł]

Opcjonalny opis

Skrót: skrót
Dostępne w: [Ustawienie dostępności]

// Resharper template code snippet
// comes here

Właściwości makr (jeśli są obecne):

  • Makro1 - wartość - EditableOccurence
  • Macro2 - wartość - EditableOccurence

Rinat Abdullin
źródło
Czy powinno to dotyczyć programistów.SE, ponieważ jest to subiektywne?
Timwi
To pytanie nie jest konstruktywne i istnieje wiele informacji na temat tworzenia szablonów na żywo i szablonów Visual Studio. programmingsolved.blogspot.com/2014/04/snippet-away.html
Thulani Chivandikwa

Odpowiedzi:

31

Prosta Lambda

Taka prosta, taka przydatna - mała lambda:

Skrót : x

Dostępne : C #, gdzie wyrażenie jest dozwolone.

x => x.$END$

Makra: brak.

Sean Kearon
źródło
22

Zaimplementuj metodę „Dispose (bool)”

Zaimplementuj wzorzec usuwania Joe Duffy'ego

Skrót: pozbądź się

Dostępne w plikach : C # 2.0+, w których dozwolona jest deklaracja elementu członkowskiego typu

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;

Właściwości makr :

  • CZŁONEK - Zaproponuj zmienną System.IDisposable - Edytowalne wystąpienie # 1
  • KLASA - zawiera nazwę typu
Ed Ball
źródło
14

Utwórz nowe urządzenie do testów jednostkowych dla pewnego typu

Skrót: ntf
Dostępne w: plikach C # 2.0+, w których dozwolona jest deklaracja elementu członkowskiego typu lub deklaracja przestrzeni nazw

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

Makra:

  • TypeToTest - brak - # 2
  • Test - brak - V
Rinat Abdullin
źródło
13

Sprawdź, czy ciąg jest pusty lub pusty.

Jeśli używasz .Net 4, możesz preferować użycie string.IsNullOrWhiteSpace ().

Skrót : sne

Dostępne w : C # 2.0+, gdzie wyrażenie jest dozwolone.

string.IsNullOrEmpty($VAR$)

Właściwości makra :

  • VAR - zasugeruj zmienną typu string. Editible = true.
Sean Kearon
źródło
11

Utwórz nowy samodzielny przypadek testowy jednostki

Skrót: ntc
Dostępne w: plikach C # 2.0+, w których dozwolona jest deklaracja typu członka

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

Makra:

  • Test - brak - V
Rinat Abdullin
źródło
10

Zadeklaruj rejestrator log4net dla bieżącego typu.

Skrót: log

Dostępne w plikach : C # 2.0+, w których dozwolona jest deklaracja elementu członkowskiego typu

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

Właściwości makr :

  • TYP - Zawiera nazwę typu
Chris Brandsma
źródło
W przypadku ponownego ostrzenia, dlaczego nie użyć tego? prywatny statyczny tylko do odczytu ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); z $ CurrType $: Zawiera nazwę typu
Henrik
Ponieważ jeśli zmienię nazwę typu później, musiałbym również zaktualizować ten wiersz kodu. Mój jest bardziej dynamiczny.
Chris Brandsma
ReSharper automatycznie zmienia nazwy wszystkich wystąpień nazwy typu. GetType () jest również wolniejsze.
Richard Dingwall,
9

Test jednostkowy MS

Nowy test jednostkowy MS Test wykorzystujący składnię AAA i konwencję nazewnictwa znaną z Art Of Unit Testing

Skrót: testowanie (lub tst lub cokolwiek chcesz)
Dostępne w: plikach C # 2.0+, w których dozwolona jest deklaracja elementu członkowskiego typu

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

    // Act


    // Assert

}

Właściwości makr (jeśli są obecne):

  • MethodName - nazwa testowanej metody
  • StateUnderTest - stan, który próbujesz przetestować
  • ExpectedBehavior - czego się spodziewasz
Vaccano
źródło
8

Sprawdź, czy zmienna ma wartość null

Skrót: ifn
Dostępne w plikach : C # 2.0+

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

Sprawdź, czy zmienna nie jest pusta

Skrót: ifnn
Dostępne w plikach : C # 2.0+

if (null != $var$)
{
    $END$
}
Chris Doggett
źródło
15
Jak potraktowało Cię przejście z C ++ do C #?
Ty.
Idzie dobrze z
``
Ładne "Warunki Yody" !! ... nierozsądny jest ten sposób kodowania ;-))
bytedev
7

Napisz podsumowanie zgodne ze stylem StyleCop dla konstruktora klas

(jeśli masz dość ciągłego wpisywania długiego standardowego podsumowania dla każdego konstruktora, aby był zgodny z regułą StyleCop SA1642)

Skrót: suma

Dostępne w: C # 2.0+

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

Makra:

  • classname - Zawierające nazwę typu - V
Dmitrii Lobanov
źródło
7

Assert.AreEqual

Prosty szablon dodawania potwierdzeń do testu jednostkowego

Skrót : ae
Dostępne w : w plikach C # 2.0+, gdzie instrukcja jest dozwolona

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

Wersja płynna:

Assert.That($expected$, Is.EqualTo($actual$));$END$
Kjetil Klaussen
źródło
7

Wiele jagód

Utwórz wyrażenie lambda z inną deklaracją zmiennej, aby ułatwić zagnieżdżanie.

Skrót: la, lb, lc

Dostępne w plikach : C # 3.0+, w których jest dozwolona klauzula wyrażenia lub zapytania

la definiuje się jako:

x => x.$END$

funt jest definiowany jako:

y => y.$END$

lc definiuje się jako:

z => z.$END$

Jest to podobne do powyższego Sean Kearon, z wyjątkiem tego, że definiuję wiele szablonów lambda live dla łatwego zagnieżdżania lambd. Najczęściej używane jest „ la ”, ale inne są przydatne w przypadku takich wyrażeń:

items.ForEach(x => x.Children.ForEach(y => Console.WriteLine(y.Name)));
James Kovacs
źródło
czy można używać nazw x, y dla argumentów lambda? jeśli masz zagnieżdżone lambdy na dwóch lub trzech poziomach, prawdopodobnie nie chcesz zapamiętywać, co oznacza x, y, z na każdym poziomie. Biorąc pod uwagę twój przykład, wybrałbym items.ForEach (item => ... i item.Children.ForEach (child => ... tak, żebym na końcu miał child.Name zamiast y.Name. myślę, że nazewnictwo argumentów lambd może być traktowane podobnie jak dla indeksów pętli i, j, k
Ilya Ivanov
6

Czekaj na to...

Wstrzymaj na wprowadzenie danych przez użytkownika przed zakończeniem aplikacji konsoli.

Skrót: pauza

Dostępne w: plikach C # 2.0+, w których dozwolone jest oświadczenie

System.Console.WriteLine("Press <ENTER> to exit...");
System.Console.ReadLine();$END$
James Kovacs
źródło
Użyłbym Console.ReadKey(true);i pozwoliłbym na naciśnięcie dowolnego klawisza.
MasterMastic
6

Generowanie właściwości zależności

Generuje właściwość zależności

Skrót: dp
Dostępne w: C # 3.0, gdzie deklaracja elementu członkowskiego jest dozwolona

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$

Właściwości makr (jeśli są obecne):

PropertyName - brak makra - nr 3
PropertyType - typ
domyślny oczekiwany w tym momencie - nr 2 OwnerType - zawiera nazwę typu - brak możliwości edycji

Jonas Van der Aa
źródło
5

Powiadom właściwość o zmianie

To jest mój ulubiony, ponieważ często go używam i robi za mnie dużo pracy.

Skrót : npc

Dostępne w : C # 2.0+, gdzie wyrażenie jest dozwolone.

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

Makra :

  • MEMBER - zawierający nazwę typu członka. Nie można edytować.Uwaga: upewnij się, że ten jest pierwszy na liście.
  • LOWEREDMEMBER - wartość MEMBER z pierwszym małym znakiem. Nie można edytować.

Użycie : Wewnątrz ustawiacza właściwości, takiego jak ten:

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

Zakłada się, że zmienna zapasowa zaczyna się od „_”. Zastąp to czymkolwiek używasz. Zakłada się również, że masz metodę zmiany właściwości, podobną do tej:

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

W rzeczywistości wersja tego, której używam, jest oparta na lambdzie („bo kocham swoje lambdy!) I tworzy poniższe. Zasady są takie same jak powyżej.

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

To znaczy , kiedy nie używam niezwykle eleganckiego i użytecznego PostSharp do wykonania całej operacji INotifyPropertyChanged bez żadnego wysiłku .

Sean Kearon
źródło
5

Szybki skrót ExpectedException

Tylko szybki skrót do dodania do moich atrybutów testów jednostkowych.

Skrót : ee

Dostępne w : Dostępne w: plikach C # 2.0+, w których dozwolona jest deklaracja elementu członkowskiego typu

[ExpectedException(typeof($TYPE$))]
womp
źródło
Tylko krótka uwaga, że ​​była to teraz kilka wersji, ponieważ ExpectedException został wycofany w NUnit na rzecz używania Assert.Throws <>
Stécy
Tak proszę proszę przystanek wszyscy używając ExpectedExceptionAttribute, wciąż widzę deweloperów przy użyciu MSTest używać tego nawet dzisiaj :-(
bytedev
5

Mapowanie właściwości AutoMapper

Skrót: fm

Dostępne w: plikach C # 2.0+, w których dozwolone jest oświadczenie

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

Makra:

  • właściwość - edytowalne wystąpienie
  • src_property - edytowalne wystąpienie

Uwaga:

Zostawiam „kropkę” lambda wyłączoną, aby móc uderzyć. natychmiast i uzyskaj inteligencję własności. Wymaga AutoMapper ( http://automapper.codeplex.com/ ).

David R. Longnecker
źródło
4

Utwórz skrót dla przypadku testowego dla NUnit

To może służyć jako przypomnienie (o funkcjonalności do zaimplementowania lub przetestowania), które pojawia się w module uruchamiającym testy jednostkowe (jak każdy inny ignorowany test),

Skrót: nts
Dostępne w: plikach C # 2.0+, w których dozwolona jest deklaracja elementu członkowskiego typu

[Test, Ignore]
public void $TestName$()
{
    throw new NotImplementedException();
}
$END$
Rinat Abdullin
źródło
Robię wariację na ten temat, ale z wyraźnym Assert.Fail () w treści: aleriel.com/blog/2010/04/07/replace-paper-with-unit-tests
Adam Lear
4

Wywołaj, jeśli jest to wymagane

Przydatne podczas tworzenia aplikacji WinForms, w których metoda powinna być wywoływana z wątków spoza interfejsu użytkownika, a ta metoda powinna następnie skierować wywołanie do wątku interfejsu użytkownika.

Skrót : nr inw

Dostępne w : C # 3.0+ Files jest dozwolone

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

Makra

  • METHOD_NAME - zawiera nazwę członka typu

Zwykle użyjesz tego szablonu jako pierwszej instrukcji w danej metodzie, a wynik będzie podobny do:

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

    // Rest of method will only execute on the correct thread
    // ...
}
Drew Noakes
źródło
4

Nowy przewodnik C #

Generuje nowe wystąpienie System.Guid zainicjowane do nowej wygenerowanej wartości guid

Skrót: csguid Dostępne w: w plikach C # 2.0+

new System.Guid("$GUID$")

Właściwości makr :

  • GUID - nowy identyfikator GUID - fałsz
codekaizen
źródło
Najnowsze wersje ReSharper zawierają teraz domyślnie skrót nguid .
Jamie Keeling
Prawda, ale generuje tylko wartość guid, a nie inicjuje typu w C #.
codekaizen
4

Metoda testowa MSTest

To trochę kiepskie, ale jest przydatne. Miejmy nadzieję, że ktoś wyciągnie z tego jakąś użyteczność.

Skrót: testMethod

Dostępne w: C # 2.0

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

    //Arrange.

    //Act.

    //Assert.
}

$END$
Daver
źródło
4

Metoda konfiguracji NUnit

Skrót: konfiguracja
Dostępne w: Dostępne w: C # 2.0+ pliki, w których dozwolona jest deklaracja typu elementu członkowskiego

[NUnit.Framework.SetUp]
public void SetUp()
{
    $END$
}
parakwatu
źródło
Słuszna uwaga. Przychodzi mi do głowy kilka przypadków, w których możesz chcieć utworzyć podklasy urządzeń testowych (być może gdybyś chciał napisać testy „kontraktowe”, w których zestaw twierdzeń powinien odnosić się do wielu obiektów), ale myślę, że w znacznie bardziej powszechnym przypadku jest zbędne. Zmienię to.
parakwat
Ulepszenie tego ............ prywatnego $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }
bytedev
4

Metoda NUnit Teardown

Skrót: dezaktywacja
Dostępne w: Dostępne w: plikach C # 2.0+, w których dozwolona jest deklaracja typu członka

[NUnit.Framework.TearDown]
public void TearDown()
{
    $END$
}
parakwatu
źródło
3

Utwórz kontrolę poprawności, aby upewnić się, że argument nigdy nie jest pusty

Skrót: eann
Dostępne w: plikach C # 2.0+, w których dozwolona jest instrukcja typu

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

Makra:

  • wewnętrzna - Zaproponuj parametr - # 1

Uwagi: Chociaż ten fragment jest przeznaczony dla biblioteki .NET Lokad.Shared typu open source , można go łatwo dostosować do dowolnego innego rodzaju sprawdzania argumentów.

Rinat Abdullin
źródło
3

Nowa klasa COM

Skrót : comclass

Dostępne w plikach: C # 2.0+, w których jest dozwolona deklaracja elementu członkowskiego typu lub deklaracja przestrzeni nazw

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

Makra

  • GUID - nowy identyfikator GUID
  • NAZWA - do edycji
  • INTERFEJS - edytowalny
Ian G.
źródło
2
Ładny szablon, ale może lepiej pasować do szablonu pliku niż do szablonu aktywnego.
Drew Noakes
3

Assert Invoke nie jest wymagane

Przydatne przy tworzeniu aplikacji WinForms, w których chcesz mieć pewność, że kod jest wykonywany w odpowiednim wątku dla danego elementu. Zwróć uwagę, że Controlnarzędzia ISynchronizeInvoke.

Skrót : ani

Dostępne w : C # 2.0+ Files jest dozwolone

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

Makra

  • SYNC_INVOKE - Zaproponuj zmienną o wartościSystem.ComponentModel.ISynchronizeInvoke
Drew Noakes
źródło
2

Trace - Writeline, z formatem

Bardzo prosty szablon do dodawania śladu ze sformatowanym ciągiem znaków (jak już obsługuje Debug.WriteLine).

Skrót: twlf
Dostępne w: plikach C # 2.0+, w których dozwolone są instrukcje

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

Właściwości makr:

  • Argument - value- EditableOccurence
  • Maska - "{0}"- EditableOccurence
Ray Hayes
źródło
1

Nowy fałszywy izolator Typemock

Skrót : fałszywy
Dostępne w : [w plikach C # 2.0, gdzie instrukcja jest dozwolona]

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

Właściwości makr:
* $ TYPE $ - Zaproponuj typ nowej zmiennej
* $ Name $ - Wartość innej zmiennej ( Typ ) z pierwszym znakiem małej litery

Karsten
źródło
1

Ponieważ pracuję teraz z Unity, wymyśliłem kilka, które ułatwiają mi życie:


Wpisz Alias

Skrót : ta
Dostępne w : * .xml; * .config

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

Deklaracja typu

To jest typ bez nazwy i bez argumentów

Skrót : tp
Dostępne w : * .xml; * .config

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

Deklaracja typu (z nazwą)

To jest typ z nazwą i bez argumentów

Skrót : tn
Dostępne w : * .xml; * .config

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

Deklaracja typu z konstruktorem

To jest typ z nazwą i bez argumentów

Skrót : tpc
Dostępne w : * .xml; * .config

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

itp....

Bryce Fischer
źródło
1

Log4net XML Configuration Block

Możesz zaimportować szablon bezpośrednio:

<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>
Igor Brejc
źródło
1

Uczyń metodę wirtualną

Dodaje wirtualne słowo kluczowe. Szczególnie przydatne w przypadku korzystania z NHibernate, EF lub podobnego środowiska, w którym metody i / lub właściwości muszą być wirtualne, aby umożliwić leniwe ładowanie lub proxy.

Skrót: v

Dostępne w pliku : C # 2.0+, w którym dozwolona jest deklaracja elementu członkowskiego typu

virtual $END$

Sztuczka polega na tym, że przestrzeń po wirtualnej może być trudna do zobaczenia powyżej. Rzeczywisty szablon to „virtual $ END $” z włączonym kodem ponownego formatowania. Pozwala to przejść do punktu wstawiania poniżej (oznaczonego |) i wpisać v:

public |string Name { get; set; }
James Kovacs
źródło