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


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.


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

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

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.

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

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

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

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

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

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$

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

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$

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


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 .


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

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/ ).


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$

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
    // ...
}

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

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$

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

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

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.


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

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

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

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


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


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>

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; }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.