Welche ReSharper 4+ Live-Vorlagen für C # verwenden Sie? [geschlossen]

94

Welche ReSharper 4.0-Vorlagen für C # verwenden Sie?

Lassen Sie uns diese im folgenden Format teilen:


[Titel]

Optionale Beschreibung

Verknüpfung: Verknüpfung
Verfügbar in: [AvailabilitySetting]

// Resharper template code snippet
// comes here

Makroeigenschaften (falls vorhanden):

  • Macro1 - Value - EditableOccurence
  • Macro2 - Value - EditableOccurence

Rinat Abdullin
quelle
Sollte dies auf Programmierern sein. SE stattdessen, weil es subjektiv ist?
Timwi
Diese Frage ist nicht konstruktiv und es gibt viele Informationen zu Live-Vorlagen für Resharper und Visual Studio-Vorlagen. programmingsolved.blogspot.com/2014/04/snippet-away.html
Thulani Chivandikwa

Antworten:

31

Einfaches Lambda

So einfach, so nützlich - ein kleines Lambda:

Verknüpfung : x

Verfügbar : C #, wobei Ausdruck zulässig ist.

x => x.$END$

Makros: keine.

Sean Kearon
quelle
22

Implementieren Sie die Methode 'Dispose (bool)'

Implementieren Sie das Entsorgungsmuster von Joe Duffy

Verknüpfung: entsorgen

Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration von Typmitgliedern zulässig ist

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;

Makroeigenschaften :

  • MITGLIED - Variable von System.IDisposable vorschlagen - Bearbeitbares Vorkommen # 1
  • KLASSE - Enthält den Typnamen
Ed Ball
quelle
14

Erstellen Sie eine neue Einheitentestvorrichtung für einen Typ

Verknüpfung: ntf
Verfügbar in: C # 2.0+ -Dateien, in denen eine Typmitgliedsdeklaration oder eine Namespacedeklaration zulässig ist

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

Makros:

  • TypeToTest - keine - # 2
  • Test - keine - V.
Rinat Abdullin
quelle
13

Überprüfen Sie, ob eine Zeichenfolge null oder leer ist.

Wenn Sie .Net 4 verwenden, bevorzugen Sie möglicherweise string.IsNullOrWhiteSpace ().

Abkürzung : sne

Verfügbar in : C # 2.0+, wo Ausdruck erlaubt ist.

string.IsNullOrEmpty($VAR$)

Makroeigenschaften :

  • VAR - schlägt eine Variable vom Typ string vor. Editible = true.
Sean Kearon
quelle
11

Erstellen Sie einen neuen eigenständigen Unit-Testfall

Verknüpfung: ntc
Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration eines Typmitglieds zulässig ist

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

Makros:

  • Test - keine - V.
Rinat Abdullin
quelle
10

Deklarieren Sie einen log4net-Logger für den aktuellen Typ.

Verknüpfung: Protokoll

Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration von Typmitgliedern zulässig ist

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

Makroeigenschaften :

  • TYPE - Enthält den Typnamen
Chris Brandsma
quelle
Warum nicht mit Re-Sharper verwenden? private statische schreibgeschützte ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); mit $ CurrType $: Enthält Typnamen
Henrik
Denn wenn ich den Typnamen später ändern würde, müsste ich auch diese Codezeile aktualisieren. Meins ist dynamischer.
Chris Brandsma
ReSharper benennt automatisch alle Instanzen eines Typnamens um. GetType () ist auch langsamer.
Richard Dingwall
9

MS Test Unit Test

Neuer MS Test Unit-Test unter Verwendung der AAA-Syntax und der Namenskonvention in Art Of Unit Testing

Abkürzung: Testen (oder tst oder was auch immer Sie wollen)
Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration von Typmitgliedern zulässig ist

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

    // Act


    // Assert

}

Makroeigenschaften (falls vorhanden):

  • Methodenname - Der Name der zu testenden Methode
  • StateUnderTest - Der Status, den Sie testen möchten
  • ExpectedBehavior - Was Sie erwarten
Vaccano
quelle
8

Überprüfen Sie, ob die Variable null ist

Verknüpfung: ifn
Verfügbar in: C # 2.0+ -Dateien

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

Überprüfen Sie, ob die Variable nicht null ist

Verknüpfung: ifnn
Verfügbar in: C # 2.0+ -Dateien

if (null != $var$)
{
    $END$
}
Chris Doggett
quelle
15
Wie hat Sie dieser Übergang von C ++ zu C # behandelt?
Ty.
Geht gut mit 'Smart Completion
ausführen
Schöne "Yoda Bedingungen" !! ... unklug ist diese Art der Codierung ;-))
bytedev
7

Schreiben Sie eine StyleCop-kompatible Zusammenfassung für den Klassenkonstruktor

(Wenn Sie es satt haben, ständig eine lange Standardzusammenfassung für jeden Konstruktor einzugeben, damit diese der StyleCop-Regel SA1642 entspricht)

Abkürzung : csum

Verfügbar in: C # 2.0+

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

Makros:

  • Klassenname - Enthält den Typnamen - V.
Dmitrii Lobanov
quelle
7

Assert.AreEqual

Einfache Vorlage zum Hinzufügen von Asserts zu einem Komponententest

Verknüpfung : ae
Verfügbar in : in C # 2.0+ -Dateien, in denen Anweisungen zulässig sind

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

Fließende Version:

Assert.That($expected$, Is.EqualTo($actual$));$END$
Kjetil Klaussen
quelle
7

Viele Lambdas

Erstellen Sie einen Lambda-Ausdruck mit einer anderen Variablendeklaration, um das Verschachteln zu vereinfachen.

Abkürzung: la, lb, lc

Verfügbar in: C # 3.0+ -Dateien, in denen Ausdrucks- oder Abfrageklauseln zulässig sind

la ist definiert als:

x => x.$END$

lb ist definiert als:

y => y.$END$

lc ist definiert als:

z => z.$END$

Dies ähnelt Sean Kearon oben, außer dass ich mehrere Lambda-Live-Vorlagen für das einfache Verschachteln von Lambdas definiere. " la " wird am häufigsten verwendet, aber andere sind nützlich, wenn Sie mit Ausdrücken wie diesen umgehen:

items.ForEach(x => x.Children.ForEach(y => Console.WriteLine(y.Name)));
James Kovacs
quelle
Ist es in Ordnung, x, y-Namen für Lambda-Argumente zu verwenden? Wenn Sie verschachtelte Lambdas mit zwei bis drei Ebenen haben, möchten Sie sich wahrscheinlich nicht merken, was x, y, z auf jeder Ebene bedeutet. In Anbetracht Ihres Beispiels würde ich mit items.ForEach (item => ... und item.Children.ForEach (child => ...) gehen, so dass ich am Ende child.Name anstelle von y.Name hätte. Ich ziehe an Ich glaube nicht, dass die Benennung von Lambdas-Argumenten ähnlich wie die von Schleifenindizes i, j, k behandelt werden kann
Ilya Ivanov
6

Warte darauf...

Pause für Benutzereingaben vor dem Ende einer Konsolenanwendung.

Verknüpfung: Pause

Verfügbar in: C # 2.0+ -Dateien, in denen Anweisungen zulässig sind

System.Console.WriteLine("Press <ENTER> to exit...");
System.Console.ReadLine();$END$
James Kovacs
quelle
Ich würde verwenden Console.ReadKey(true);und zulassen, dass eine beliebige Taste gedrückt wird.
MasterMastic
6

Generierung von Abhängigkeitseigenschaften

Erzeugt eine Abhängigkeitseigenschaft

Verknüpfung: dp
Verfügbar in: C # 3.0, wo die Mitgliederdeklaration zulässig ist

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$

Makroeigenschaften (falls vorhanden):

PropertyName - Kein Makro - # 3
PropertyType - Zu diesem Zeitpunkt erwarteter Vermutungstyp - # 2
OwnerType - Enthält den Typnamen - kein bearbeitbares Vorkommen

Jonas Van der Aa
quelle
5

Benachrichtigen Sie die geänderte Eigenschaft

Dies ist mein Favorit, weil ich es oft benutze und es viel Arbeit für mich erledigt.

Verknüpfung : npc

Verfügbar in : C # 2.0+, wo Ausdruck erlaubt ist.

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

Makros :

  • MITGLIED - Enthält den Namen des Mitgliedstyps. Nicht bearbeitbar. Hinweis: Stellen Sie sicher, dass dieser zuerst in der Liste steht.
  • LOWEREDMEMBER - Wert von MEMBER mit dem ersten Zeichen in Kleinbuchstaben. Nicht bearbeitbar.

Verwendung : In einem Property Setter wie folgt:

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

Es wird davon ausgegangen, dass Ihre Hintergrundvariable mit einem "_" beginnt. Ersetzen Sie dies durch alles, was Sie verwenden. Es wird auch davon ausgegangen, dass Sie eine Eigenschaftsänderungsmethode wie die folgende haben:

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

In Wirklichkeit basiert die Version, die ich benutze, auf Lambda (weil ich meine Lambdas liebe!) Und produziert das Folgende. Die Prinzipien sind die gleichen wie oben.

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

Dann verwende ich nicht das äußerst elegante und nützliche PostSharp, um die gesamte INotifyPropertyChanged-Sache ohne Anstrengung auszuführen .

Sean Kearon
quelle
5

Quick ExpectedException Shortcut

Nur eine kurze Verknüpfung zum Hinzufügen zu meinen Unit-Test-Attributen.

Abkürzung : ee

Verfügbar in : Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration von Typmitgliedern zulässig ist

[ExpectedException(typeof($TYPE$))]
womp
quelle
Nur eine kurze Anmerkung, dass es eine paar Version ist, seit ExpectedException in NUnit zugunsten der Verwendung von Assert.Throws <>
Stécy
Ja, bitte, bitte, alle hören auf, ExpectedExceptionAttribute zu verwenden. Sehen Sie immer noch, wie Entwickler, die MSTest verwenden, dies auch heute noch verwenden :-(
bytedev
5

AutoMapper-Eigenschaftszuordnung

Abkürzung: fm

Verfügbar in: C # 2.0+ -Dateien, in denen Anweisungen zulässig sind

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

Makros:

  • Eigentum - bearbeitbares Vorkommen
  • src_property - bearbeitbares Vorkommen

Hinweis:

Ich lasse den Lambda "Punkt" weg, damit ich schlagen kann. sofort und Eigentum Intellisense bekommen. Benötigt AutoMapper ( http://automapper.codeplex.com/ ).

David R. Longnecker
quelle
4

Erstellen Sie einen Testfall-Stub für NUnit

Dieser kann als Erinnerung (an die zu implementierende oder zu testende Funktionalität) dienen, die im Unit-Test-Runner angezeigt wird (wie jeder andere ignorierte Test).

Verknüpfung: nts
Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration von Typmitgliedern zulässig ist

[Test, Ignore]
public void $TestName$()
{
    throw new NotImplementedException();
}
$END$
Rinat Abdullin
quelle
Ich mache eine Variation davon, aber mit explizitem Assert.Fail () im Body: aleriel.com/blog/2010/04/07/replace-paper-with-unit-tests
Adam Lear
4

Bei Bedarf aufrufen

Nützlich bei der Entwicklung von WinForms-Anwendungen, bei denen eine Methode von Nicht-UI-Threads aufgerufen werden kann und diese Methode dann den Aufruf an den UI-Thread weiterleitet.

Verknüpfung : inv

Verfügbar in : Die Anweisung C # 3.0+ files ist zulässig

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

Makros

  • METHOD_NAME - Enthält den Namen des Typmitglieds

Normalerweise verwenden Sie diese Vorlage als erste Anweisung in einer bestimmten Methode. Das Ergebnis ähnelt:

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

    // Rest of method will only execute on the correct thread
    // ...
}
Drew Noakes
quelle
4

Neue C # Guid

Generiert eine neue System.Guid-Instanz, die mit einem neu generierten Guid-Wert initialisiert wurde

Verknüpfung: csguid Verfügbar in: in C # 2.0+ -Dateien

new System.Guid("$GUID$")

Makroeigenschaften :

  • GUID - Neue GUID - Falsch
Codekaizen
quelle
Neuere Versionen von ReSharper enthalten jetzt standardmäßig die Verknüpfung nguid .
Jamie Keeling
True, aber es wird nur ein Guid-Wert generiert, nicht der Typ in C #.
Codekaizen
4

MSTest-Testmethode

Das ist ein bisschen lahm, aber es ist nützlich. Hoffentlich wird jemand einen Nutzen daraus ziehen.

Verknüpfung: testMethod

Verfügbar in: C # 2.0

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

    //Arrange.

    //Act.

    //Assert.
}

$END$
Daver
quelle
4

NUnit Setup-Methode

Verknüpfung: Setup
Verfügbar in: Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration eines Typmitglieds zulässig ist

[NUnit.Framework.SetUp]
public void SetUp()
{
    $END$
}
Paraquat
quelle
Guter Punkt. Ich kann mir einige Fälle vorstellen, in denen Sie Testvorrichtungen in Unterklassen unterteilen möchten (vielleicht, wenn Sie "Vertragstests" schreiben möchten, bei denen eine Reihe von Aussagen für eine Reihe von Objekten gelten sollte), aber ich denke im viel häufigeren Fall virtuell ist überflüssig. Ich werde es herausarbeiten.
Paraquat
Eine Verbesserung dazu ............ private $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }
bytedev
4

NUnit Teardown-Methode

Verknüpfung: Teardown
Verfügbar in: Verfügbar in: C # 2.0+ -Dateien, in denen die Deklaration eines Typmitglieds zulässig ist

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

Erstellen Sie eine Überprüfung der Integrität, um sicherzustellen, dass ein Argument niemals null ist

Verknüpfung: eann
Verfügbar in: C # 2.0+ -Dateien, in denen die Typanweisung zulässig ist

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

Makros:

  • inner - Parameter vorschlagen - # 1

Anmerkungen: Obwohl dieses Snippet auf Open Source .NET Lokad.Shared- Bibliotheken abzielt , kann es problemlos an jede andere Art der Argumentprüfung angepasst werden.

Rinat Abdullin
quelle
3

Neue COM-Klasse

Verknüpfung : Klasse

Verfügbar in : C # 2.0+ -Dateien, in denen eine Typmitgliedsdeklaration oder eine Namespace-Deklaration zulässig ist

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

Makros

  • GUID - Neue GUID
  • NAME - Bearbeitbar
  • SCHNITTSTELLE - Bearbeitbar
Ian G.
quelle
2
Schöne Vorlage, aber diese eignet sich möglicherweise besser für eine Dateivorlage als für eine Live-Vorlage.
Drew Noakes
3

Assert Invoke nicht erforderlich

Nützlich bei der Entwicklung von WinForms-Anwendungen, bei denen Sie sicherstellen möchten, dass der Code auf dem richtigen Thread für ein bestimmtes Element ausgeführt wird. Beachten Sie, dass Controlimplementiert ISynchronizeInvoke.

Abkürzung : ani

Verfügbar in : Die Anweisung C # 2.0+ files ist zulässig

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

Makros

  • SYNC_INVOKE - Variable von vorschlagenSystem.ComponentModel.ISynchronizeInvoke
Drew Noakes
quelle
2

Trace - Writeline mit Format

Sehr einfache Vorlage zum Hinzufügen eines Trace mit einer formatierten Zeichenfolge (wie Debug.WriteLine bereits unterstützt).

Abkürzung: twlf
Verfügbar in: C # 2.0+ -Dateien, in denen Anweisungen zulässig sind

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

Makroeigenschaften:

  • Argument - value- EditableOccurence
  • Maske - "{0}"- EditableOccurence
Ray Hayes
quelle
1

Neue gefälschte Typemock-Isolator

Verknüpfung : gefälscht
Verfügbar in : [in c # 2.0-Dateien, in denen Anweisungen zulässig sind]

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

Makroeigenschaften:
* $ TYPE $ - Typ für eine neue Variable vorschlagen
* $ Name $ - Wert einer anderen Variablen ( Typ ) mit dem ersten Zeichen in Kleinbuchstaben

Karsten
quelle
1

Da ich gerade mit Unity zusammenarbeite, habe ich mir einige ausgedacht, um mein Leben ein bisschen einfacher zu machen:


Geben Sie Alias ​​ein

Verknüpfung : ta
Verfügbar in : * .xml; * .config

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

Typdeklaration

Dies ist ein Typ ohne Namen und ohne Argumente

Verknüpfung : tp
Verfügbar in : * .xml; * .config

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

Typdeklaration (mit Namen)

Dies ist ein Typ mit Namen und ohne Argumente

Verknüpfung : tn
Verfügbar in : * .xml; * .config

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

Typdeklaration mit Konstruktor

Dies ist ein Typ mit Namen und ohne Argumente

Verknüpfung : tpc
Verfügbar in : * .xml; * .config

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

etc....

Bryce Fischer
quelle
1

log4net XML-Konfigurationsblock

Sie können die Vorlage direkt importieren:

<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
quelle
1

Methode virtuell machen

Fügt ein virtuelles Schlüsselwort hinzu. Besonders nützlich bei Verwendung von NHibernate, EF oder einem ähnlichen Framework, bei dem Methoden und / oder Eigenschaften virtuell sein müssen, um ein verzögertes Laden oder Proxying zu ermöglichen.

Verknüpfung: v

Verfügbar in: C # 2.0+ -Datei, in der die Deklaration eines Typmitglieds zulässig ist

virtual $END$

Der Trick hier ist der Raum nach virtuell, der oben schwer zu sehen sein könnte. Die eigentliche Vorlage ist "virtual $ END $" mit aktiviertem Neuformatierungscode. Auf diese Weise können Sie zum Einfügepunkt unten (gekennzeichnet mit |) gehen und v eingeben:

public |string Name { get; set; }
James Kovacs
quelle