Template live ReSharper 4+ apa untuk C # yang Anda gunakan? [Tutup]

94

Template ReSharper 4.0 apa untuk C # yang Anda gunakan?

Mari bagikan ini dalam format berikut:


[Judul]

Deskripsi opsional

Pintasan: pintasan
Tersedia di: [AvailabilitySetting]

// Resharper template code snippet
// comes here

Properti makro (jika ada):

  • Macro1 - Nilai - EditableOccurence
  • Macro2 - Nilai - EditableOccurence

Rinat Abdullin
sumber
Haruskah ini di programmer.SE bukan karena subjektif?
Timwi
Pertanyaan ini tidak konstruktif dan ada banyak informasi di luar sana tentang template live resharper dan template studio visual. programmingsolved.blogspot.com/2014/04/snippet-away.html
Thulani Chivandikwa

Jawaban:

31

Lambda sederhana

Sangat sederhana, sangat berguna - sedikit lambda:

Jalan pintas : x

Tersedia : C # di mana ekspresi diperbolehkan.

x => x.$END$

Makro: tidak ada.

Sean Kearon
sumber
22

Terapkan Metode 'Buang (bool)'

Terapkan Pola Pembuangan Joe Duffy

Jalan pintas: buang

Tersedia dalam: C # 2.0+ file di mana deklarasi tipe anggota diperbolehkan

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;

Properti makro :

  • ANGGOTA - Sarankan variabel System.IDisposable - Kejadian yang Dapat Diedit # 1
  • KELAS - Mengandung nama tipe
Ed Ball
sumber
14

Buat perlengkapan uji unit baru untuk beberapa jenis

Pintasan: ntf
Tersedia dalam: C # 2.0+ file di mana deklarasi anggota tipe atau deklarasi namespace diperbolehkan

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

Makro:

  • TypeToTest - tidak ada - # 2
  • Uji - tidak ada - V
Rinat Abdullin
sumber
13

Periksa apakah sebuah string kosong atau kosong.

Jika Anda menggunakan .Net 4 Anda mungkin lebih suka menggunakan string.IsNullOrWhiteSpace ().

Pintasan : sne

Tersedia dalam : C # 2.0+ di mana ekspresi diperbolehkan.

string.IsNullOrEmpty($VAR$)

Properti makro :

  • VAR - menyarankan variabel tipe string. Dapat diedit = benar.
Sean Kearon
sumber
11

Buat kasus uji unit baru yang berdiri sendiri

Pintasan: ntc
Tersedia dalam: C # 2.0+ file di mana deklarasi tipe anggota diperbolehkan

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

Makro:

  • Uji - tidak ada - V
Rinat Abdullin
sumber
10

Deklarasikan logger log4net untuk tipe saat ini.

Pintasan: log

Tersedia dalam: C # 2.0+ file di mana deklarasi tipe anggota diperbolehkan

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

Properti makro :

  • TYPE - Mengandung nama tipe
Chris Brandsma
sumber
Dengan lebih tajam, mengapa tidak menggunakan ini? private static readonly ILog _Logger = LogManager.GetLogger (typeof ($ CurrType $)); dengan $ CurrType $: Mengandung nama jenis
Henrik
Karena jika saya mengubah nama tipe nanti saya harus memperbarui baris kode itu juga. Punyaku lebih dinamis.
Chris Brandsma
ReSharper secara otomatis mengganti nama semua contoh dari nama tipe. GetType () juga lebih lambat.
Richard Dingwall
9

Uji Unit Uji MS

Uji MS Test Unit baru menggunakan sintaks AAA dan konvensi penamaan yang ditemukan di Art Of Unit Testing

Pintasan: pengujian (atau tst, atau apa pun yang Anda inginkan)
Tersedia di: C # 2.0+ file di mana deklarasi tipe anggota diperbolehkan

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

    // Act


    // Assert

}

Properti makro (jika ada):

  • MethodName - Nama metode yang diuji
  • StateUnderTest - Status yang Anda coba uji
  • ExpectedBehavior - Apa yang Anda harapkan terjadi
Vaccano
sumber
8

Periksa apakah variabel nol

Pintasan: ifn
Tersedia dalam: C # 2.0+ file

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

Periksa apakah variabel tidak nol

Pintasan: ifnn
Tersedia dalam: C # 2.0+ file

if (null != $var$)
{
    $END$
}
Chris Doggett
sumber
15
Bagaimana transisi dari C ++ ke C # memperlakukan Anda?
Ty.
Berfungsi dengan baik dengan 'Jalankan penyelesaian pintar' sebagai makro untuk $ var $
mklein
"Kondisi Yoda" yang bagus !! ... tidak bijaksana cara pengkodean ini adalah ;-))
bytedev
7

Menulis ringkasan yang sesuai StyleCop untuk konstruktor kelas

(jika Anda lelah terus-menerus mengetik dalam ringkasan standar yang panjang untuk setiap konstruktor sehingga sesuai dengan aturan StyleCop SA1642)

Pintasan: csum

Tersedia dalam: C # 2.0+

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

Makro:

  • classname - Mengandung nama tipe - V
Dmitrii Lobanov
sumber
7

Assert.AreEqual

Template sederhana untuk menambahkan pernyataan ke pengujian unit

Pintasan : ae
Tersedia dalam : dalam file C # 2.0+ di mana pernyataan diperbolehkan

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

Versi lancar:

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

Banyak Lambdas

Buat ekspresi lambda dengan deklarasi variabel berbeda untuk memudahkan penumpukan.

Pintasan: la, lb, lc

Tersedia dalam: C # 3.0+ file di mana ekspresi atau klausa kueri diperbolehkan

la didefinisikan sebagai:

x => x.$END$

lb didefinisikan sebagai:

y => y.$END$

lc didefinisikan sebagai:

z => z.$END$

Ini mirip dengan Sean Kearon di atas, kecuali saya mendefinisikan beberapa template live lambda untuk memudahkan pembuatan lambda. " la " paling umum digunakan, tetapi yang lain berguna saat menangani ekspresi seperti ini:

items.ForEach(x => x.Children.ForEach(y => Console.WriteLine(y.Name)));
James Kovacs
sumber
apakah boleh menggunakan nama x, y untuk argumen lambda? jika Anda memiliki lambda bersarang dua-tiga tingkat, Anda mungkin tidak ingin mengingat apa arti x, y, z di setiap tingkat. Mempertimbangkan contoh Anda, saya akan menggunakan item.ForEach (item => ... dan item.Children.ForEach (child => ... sehingga pada akhirnya saya akan memiliki child.Name daripada y.Name. Saya tidak Tidak berpikir penamaan untuk argumen lambda dapat diperlakukan sama dengan untuk indeks loop i, j, k
Ilya Ivanov
6

Menunggu untuk itu...

Jeda untuk masukan pengguna sebelum akhir aplikasi konsol.

Pintasan: jeda

Tersedia dalam: C # 2.0+ file di mana pernyataan diperbolehkan

System.Console.WriteLine("Press <ENTER> to exit...");
System.Console.ReadLine();$END$
James Kovacs
sumber
Saya akan menggunakan Console.ReadKey(true);, dan membiarkan tombol apa saja ditekan.
MasterMastic
6

Pembuatan properti ketergantungan

Menghasilkan properti ketergantungan

Jalan pintas: dp
Tersedia di: C # 3.0 dimana pernyataan anggota diperbolehkan

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$

Properti makro (jika ada):

PropertyName - Tanpa Makro - # 3
PropertyType - Jenis perkiraan yang diharapkan saat ini - # 2
OwnerType - Mengandung nama tipe - tidak ada kejadian yang dapat diedit

Jonas Van der Aa
sumber
5

Beri Tahu Properti Berubah

Ini adalah favorit saya karena saya sering menggunakannya dan itu banyak membantu saya.

Pintasan : npc

Tersedia dalam : C # 2.0+ di mana ekspresi diperbolehkan.

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

Makro :

  • MEMBER - Berisi nama tipe anggota. Tidak dapat diedit. Catatan: pastikan yang ini yang pertama dalam daftar.
  • LOWEREDMEMBER - Nilai MEMBER dengan karakter pertama dalam huruf kecil. Tidak dapat diedit.

Penggunaan : Di dalam penyetel properti seperti ini:

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

Ini mengasumsikan bahwa variabel dukungan Anda dimulai dengan "_". Gantilah ini dengan apapun yang Anda gunakan. Ini juga mengasumsikan bahwa Anda memiliki metode perubahan properti seperti ini:

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

Pada kenyataannya, versi yang saya gunakan ini berbasis lambda ('cos I loves my lambda!) Dan menghasilkan yang di bawah ini. Prinsipnya sama seperti di atas.

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

Saat itulah saya tidak menggunakan PostSharp yang sangat elegan dan berguna untuk melakukan seluruh hal INotifyPropertyChanged tanpa usaha , yaitu.

Sean Kearon
sumber
5

Pintasan Quick ExpectedException

Hanya pintasan cepat untuk ditambahkan ke atribut pengujian unit saya.

Jalan pintas : ee

Tersedia dalam : Tersedia dalam: C # 2.0+ file di mana deklarasi tipe anggota diperbolehkan

[ExpectedException(typeof($TYPE$))]
womp
sumber
Sekadar catatan singkat bahwa ini adalah versi pasangan sekarang karena ExpectedException sudah tidak digunakan lagi di NUnit karena mendukung penggunaan Assert.Throws <>
Stécy
Ya tolong tolong semuanya berhenti menggunakan ExpectedExceptionAttribute, masih lihat pengembang yang menggunakan MSTest menggunakan ini bahkan sampai hari ini :-(
bytedev
5

Pemetaan Properti AutoMapper

Pintasan: fm

Tersedia dalam: C # 2.0+ file di mana pernyataan diperbolehkan

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

Makro:

  • properti - kejadian yang dapat diedit
  • src_property - kejadian yang dapat diedit

catatan:

Aku membiarkan lambda "titik" mati agar aku bisa memukul. segera dan dapatkan intellisense properti. Membutuhkan AutoMapper ( http://automapper.codeplex.com/ ).

David R. Longnecker
sumber
4

Buat rintisan kasus uji untuk NUnit

Yang ini bisa berfungsi sebagai pengingat (fungsionalitas untuk diterapkan atau diuji) yang muncul di runner pengujian unit (seperti pengujian yang diabaikan lainnya),

Pintasan: nts
Tersedia dalam: C # 2.0+ file di mana deklarasi tipe anggota diperbolehkan

[Test, Ignore]
public void $TestName$()
{
    throw new NotImplementedException();
}
$END$
Rinat Abdullin
sumber
Saya melakukan variasi pada ini, tetapi dengan tegas Assert.Fail () di tubuh: aleriel.com/blog/2010/04/07/replace-paper-with-unit-tests
Adam Lear
4

Panggil jika Diperlukan

Berguna saat mengembangkan aplikasi WinForms di mana metode harus dapat dipanggil dari utas non-UI, dan metode itu kemudian harus mengatur panggilan ke utas UI.

Pintasan : inv

Tersedia dalam : Pernyataan file C # 3.0+ diperbolehkan

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

Makro

  • METHOD_NAME - Berisi nama anggota jenis

Anda biasanya akan menggunakan template ini sebagai pernyataan pertama dalam metode tertentu dan hasilnya menyerupai:

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

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

Panduan C # Baru

Menghasilkan instance System.Guid baru yang diinisialisasi ke nilai guid baru yang dihasilkan

Pintasan: csguid Tersedia dalam: dalam file C # 2.0+

new System.Guid("$GUID$")

Properti makro :

  • GUID - GUID Baru - Salah
codekaizen
sumber
Versi terbaru ReSharper sekarang menyertakan pintasan nguid secara default.
Jamie Keeling
Benar, tetapi hanya menghasilkan nilai panduan, bukan menginisialisasi tipe di C #.
codekaizen
4

Metode Tes MSTest

Ini agak timpang tapi berguna. Mudah-mudahan seseorang akan mendapatkan manfaat darinya.

Pintasan: testMethod

Tersedia dalam: C # 2.0

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

    //Arrange.

    //Act.

    //Assert.
}

$END$
Daver
sumber
4

Metode Pengaturan NUnit

Pintasan: setup
Tersedia dalam: Tersedia di: C # 2.0+ file di mana pernyataan anggota tipe diperbolehkan

[NUnit.Framework.SetUp]
public void SetUp()
{
    $END$
}
paraquat
sumber
Poin yang bagus. Saya dapat memikirkan beberapa kasus di mana Anda mungkin ingin perlengkapan uji subkelas (mungkin jika Anda ingin menulis tes "kontrak" di mana serangkaian pernyataan harus diterapkan ke sejumlah objek), tetapi saya pikir dalam kasus yang jauh lebih umum, virtual tidak berguna. Saya akan mengeditnya.
paraquat
Peningkatan ini ............ private $ classUnderTestType $ _classUnderTest; [NUnit.Framework.SetUp] public void SetUp () {_classUnderTest = new $ classUnderTestType $ ($ END $); }
bytedev
4

Metode NUnit Teardown

Pintasan: pembongkaran
Tersedia dalam: Tersedia dalam: C # 2.0+ file di mana pernyataan anggota tipe diperbolehkan

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

Buat pemeriksaan kewarasan untuk memastikan bahwa argumen tidak pernah nol

Pintasan: eann
Tersedia dalam: C # 2.0+ file di mana pernyataan tipe diperbolehkan

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

Makro:

  • bagian dalam - Sarankan parameter - # 1

Catatan: Meskipun cuplikan ini menargetkan pustaka .NET Lokad.Shared sumber terbuka, cuplikan ini dapat dengan mudah disesuaikan dengan jenis pemeriksaan argumen lainnya.

Rinat Abdullin
sumber
3

Kelas COM baru

Pintasan : comclass

Tersedia dalam : C # 2.0+ file di mana deklarasi tipe anggota atau deklarasi namespace diperbolehkan

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

Makro

  • GUID - GUID baru
  • NAME - Dapat diedit
  • ANTARMUKA - Dapat diedit
Ian G
sumber
2
Template bagus, tapi ini mungkin lebih cocok untuk template file daripada template langsung.
Drew Noakes
3

Assert Invoke Not Required

Berguna saat mengembangkan aplikasi WinForms di mana Anda ingin memastikan bahwa kode dijalankan pada utas yang benar untuk item tertentu. Perhatikan bahwa Controlmengimplementasikan ISynchronizeInvoke.

Jalan pintas : ani

Tersedia dalam : Pernyataan file C # 2.0+ diperbolehkan

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

Makro

  • SYNC_INVOKE - Sarankan variabelSystem.ComponentModel.ISynchronizeInvoke
Drew Noakes
sumber
2

Trace - Writeline, dengan format

Template yang sangat sederhana untuk menambahkan jejak dengan string yang diformat (seperti Debug.WriteLine sudah mendukung).

Pintasan: twlf
Tersedia dalam: C # 2.0+ file di mana pernyataan diperbolehkan

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

Properti makro:

  • Argumen - value- EditableOccurence
  • Topeng - "{0}"- Akurasi yang dapat diedit
Ray Hayes
sumber
1

Isolator Typemock baru palsu

Pintasan : palsu
Tersedia dalam : [dalam file c # 2.0 di mana pernyataan diperbolehkan]

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

Properti makro:
* $ TYPE $ - Jenis saran untuk variabel baru
* $ Nama $ - Nilai variabel lain ( Jenis ) dengan karakter pertama dalam huruf kecil

Karsten
sumber
1

Karena saya sedang bekerja dengan Unity sekarang, saya telah menemukan beberapa untuk membuat hidup saya lebih mudah:


Ketik Alias

Pintasan : ta
Tersedia dalam : * .xml; * .config

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

Jenis Deklarasi

Ini adalah tipe tanpa nama dan tanpa argumen

Pintasan : tp
Tersedia dalam : * .xml; * .config

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

Jenis Deklarasi (dengan nama)

Ini adalah tipe dengan nama dan tanpa argumen

Pintasan : tn
Tersedia dalam : * .xml; * .config

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

Ketik Deklarasi Dengan Pembuat

Ini adalah tipe dengan nama dan tanpa argumen

Pintasan : tpc
Tersedia dalam : * .xml; * .config

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

dll ....

Bryce Fischer
sumber
1

Blok Konfigurasi XML log4net

Anda dapat mengimpor template secara langsung:

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

Jadikan Metode Virtual

Menambahkan kata kunci virtual. Sangat berguna saat menggunakan NHibernate, EF, atau framework serupa di mana metode dan / atau properti harus virtual untuk mengaktifkan pemuatan lambat atau proxy.

Jalan pintas: v

Tersedia dalam: C # 2.0+ file di mana pernyataan tipe anggota diperbolehkan

virtual $END$

Triknya di sini adalah spasi setelah virtual, yang mungkin sulit dilihat di atas. Template sebenarnya adalah "virtual $ END $" dengan kode format ulang diaktifkan. Ini memungkinkan Anda untuk pergi ke titik sisipan di bawah (dilambangkan dengan |) dan ketik v:

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