Wie verwenden Sie die Mustervergleichsfunktion in ReSharper 5?

8

Der neue Mustervergleich von Resharper 5 scheint sehr kraftvoll zu sein, obwohl es ein bisschen Basteln bedarf, um herauszufinden, wie man ihn benutzt.

Für diejenigen, die mit dieser Funktion nicht vertraut sind, können Sie nach bestimmten Mustern in Ihrem Code suchen. Instanzen solcher Muster können optional durch eine Alternative ersetzt werden. In IntelliJ wurde dies als strukturelles Suchen und Ersetzen bezeichnet. Es ist viel mächtiger als einfaches RegEx suchen / ersetzen.

Ich möchte eine Reihe von Mustern sammeln, die Leute verwenden, damit ich lernen kann, wie man diese Funktion besser nutzt.

Ich schlage vor, dass jede Antwort enthält:

  • eine kurze Einführung der Begründung für das Muster
  • ein Beispiel dafür, was es zusammenbringen würde
  • ein optionales Beispiel für einen Ersatz
  • das XML, das generiert wird, indem das Muster exportiert wird, damit andere es auch ausprobieren können
Drew Noakes 20.08.2010, 14:59
quelle

9 Antworten

10

Übereinstimmung eines [Flags] Enum-Bits

.NET 4 führt die Methode System.Enum.HasFlag ein, die Ihren Code aufräumen kann.

Vorher:

%Vor%

Nachher: ​​

%Vor%

XML:

%Vor%     
Drew Noakes 20.08.2010 15:05
quelle
4

Entfernen Sie wenn umschließen um if body.

Beispiel:

Dieser Code:

%Vor%

wird ersetzt durch:

%Vor%

Also nur Körper von wenn bleibt.

Das XML:

%Vor%     
brgerner 17.02.2012 14:30
quelle
3

JetBrains bietet einen Musterkatalog für strukturelle Suche und Ersetzen zum Herunterladen mit 17 Mustern:

  • 'try / finally' Block kann in 'using' Anweisung
  • umgewandelt werden
  • Methode StringBuilder.Append kann in StringBuilder.AppendFormat
  • konvertiert werden
  • Der Vergleich mit true ist redundant
  • Bedingte Anweisung ist redundant
  • Code ist nicht erreichbar
  • 'wenn' Block nie ausgeführt wird
  • Identische Zweige in einer bedingten Anweisung
  • Redundante Verbundzuweisung mit | = Operator
  • Redundante zusammengesetzte Zuweisung mit & amp; = operator
  • Redundante zusammengesetzte Zuweisung mit | = Operator (alternativer Fall)
  • Redundante zusammengesetzte Zuweisung mit & amp; = Operator (alternativer Fall)
  • Redundante Initialisierung auf false und condition block
  • Redundante Initialisierung des Wahr- und Bedingungsblocks
  • Methode Array.CreateInstance kann durch einen Array-Erstellungsausdruck
  • ersetzt werden
  • Methode Array.CreateInstance kann durch einen zweidimensionalen Array-Erstellungsausdruck
  • ersetzt werden
  • Redundante Verwendung von GetType () == typeof () mit einem Werttyp
  • Methode OfType kann für typbasiertes Filtern verwendet werden
Drew Noakes 17.02.2012 13:58
quelle
1

Neustart einer Stoppuhr

.NET 4 führt die Methode System.Diagnostics.Stopwatch.Restart() ein, die Ihren Code aufräumen kann.

Vorher:

%Vor%

Nachher: ​​

%Vor%

XML:

%Vor%     
Drew Noakes 20.08.2010 15:03
quelle
1

Dieser ist anders. Ich habe später in meinem Projekt festgestellt, dass mbunit behauptet, dass Eigenschaftenwerte mit enums verglichen werden, wenn die AssertEx.That -Syntax verwendet wird.

Also habe ich ein Muster erstellt, um das zu finden:

%Vor%

... und ersetze es mit:

%Vor%

Hier ist das Muster:

%Vor%

    
Justin 17.02.2012 14:00
quelle
1

Zu "wie" Cast .

Beispiel:

Dieser Code:

%Vor%

wird ersetzt durch:

%Vor%

So, jetzt haben Sie die "wie" statt der regulären Besetzung.

Das XML:

%Vor%     
brgerner 17.02.2012 14:29
quelle
1

Entfernen Sie umschließende Klammern um einen Körper herum.

Beispiel:

Dieser Code:

%Vor%

wird ersetzt (mit STRG + L, um jede Zeile zu entfernen und dann dieses Muster auszuführen, um geschweifte Klammern zu entfernen) mit:

%Vor%

Also bleibt nur der Körper der Klammern übrig, nachdem man zwei Abkürzungen eingegeben hat.

Das XML:

%Vor%

    
brgerner 17.02.2012 14:29
quelle
1

Zur regulären Besetzung .

Beispiel:

Dieser Code:

%Vor%

wird ersetzt durch:

%Vor%

Sie haben also jetzt die reguläre Besetzung statt "wie" besetzt.

Das XML:

%Vor%     
brgerner 17.02.2012 14:32
quelle
0
  

Zum Beispiel empfiehlt Microsoft (und   Code-Analyse / FxCop generiert   entsprechende Warnungen), wenn Sie es tun   ein Vergleich zwischen einem String-Wert   und eine leere Zeichenfolge, um die    String.IsNullOrEmpty() Methode.

Ссылка

    
0x49D1 22.10.2010 12:20
quelle