Meziantou.Analyzer
2.0.183
Seorang penganalisa Roslyn untuk menegakkan beberapa praktik baik dalam C# dalam hal desain, penggunaan, keamanan, kinerja, dan gaya.
Instal Paket Nuget https://www.nuget.org/packages/meziantou.analyzer/
Jika Anda sudah menggunakan analisis lain, Anda dapat memeriksa aturan mana yang digandakan dengan analisis terkenal
| Pengenal | Kategori | Keterangan | Kerasnya | Diaktifkan | Perbaikan kode |
|---|---|---|---|---|---|
| MA0001 | Penggunaan | StringComparison tidak ada | ✔️ | ✔️ | |
| MA0002 | Penggunaan | IEQUALITY Comparer <string> atau icomparer <string> hilang | ✔️ | ✔️ | |
| MA0003 | Gaya | Tambahkan nama parameter untuk meningkatkan keterbacaan | ✔️ | ✔️ | |
| MA0004 | Penggunaan | Gunakan Task.configureawait | ✔️ | ✔️ | |
| MA0005 | Pertunjukan | Gunakan array.empty <T> () | ✔️ | ✔️ | |
| MA0006 | Penggunaan | Gunakan String.Equals, bukan Operator Kesetaraan | ✔️ | ✔️ | |
| MA0007 | Gaya | Tambahkan koma setelah nilai terakhir | ✔️ | ✔️ | |
| MA0008 | Pertunjukan | Tambahkan StructLayOutAttribute | ✔️ | ✔️ | |
| MA0009 | Keamanan | Tambahkan batas waktu evaluasi regex | ✔️ | ||
| MA0010 | Desain | Tandai atribut dengan atributeUsageAttribute | ✔️ | ✔️ | |
| MA0011 | Penggunaan | IformatProvider tidak ada | ✔️ | ||
| MA0012 | Desain | Jangan menaikkan jenis pengecualian yang dipesan | ✔️ | ||
| MA0013 | Desain | Jenis tidak boleh memperluas sistem. Aplikasi Exception | ✔️ | ||
| MA0014 | Desain | Jangan menaikkan System.ApplicationException Type | ✔️ | ||
| MA0015 | Penggunaan | Tentukan nama parameter di ArgumentException | ✔️ | ||
| MA0016 | Desain | Lebih suka menggunakan abstraksi koleksi daripada implementasi | ✔️ | ||
| MA0017 | Desain | Tipe abstrak seharusnya tidak memiliki konstruktor publik atau internal | ✔️ | ✔️ | |
| MA0018 | Desain | Jangan nyatakan anggota statis pada tipe generik (usang; gunakan CA1000 sebagai gantinya) | ✔️ | ||
| MA0019 | Penggunaan | Gunakan EventArgs.empty | ✔️ | ✔️ | |
| MA0020 | Pertunjukan | Gunakan metode langsung alih -alih metode LINQ | ✔️ | ✔️ | |
| MA0021 | Penggunaan | Gunakan StringComparer.GetHashCode bukan String.GetHashCode | ✔️ | ✔️ | |
| MA0022 | Desain | Mengembalikan tugas. | ✔️ | ✔️ | |
| MA0023 | Pertunjukan | Tambahkan RegexOptions.ExplicitCapture | ✔️ | ||
| MA0024 | Penggunaan | Gunakan stringcomparer eksplisit jika memungkinkan | ✔️ | ✔️ | |
| MA0025 | Desain | Menerapkan fungsionalitas alih -alih melempar notimplemented exception | ✔️ | ||
| MA0026 | Desain | Perbaiki komentar todo | ✔️ | ||
| MA0027 | Penggunaan | Lebih suka memikirkan kembali pengecualian secara implisit | ✔️ | ✔️ | |
| MA0028 | Pertunjukan | Optimalkan Penggunaan StringBuilder | ✔️ | ✔️ | |
| MA0029 | Pertunjukan | Gabungkan metode Linq | ✔️ | ✔️ | |
| MA0030 | Pertunjukan | Hapus panggilan pesanan yang tidak berguna | ✔️ | ✔️ | |
| MA0031 | Pertunjukan | Optimalkan Penggunaan Enumerable.Count () | ✔️ | ✔️ | |
| MA0032 | Penggunaan | Gunakan kelebihan dengan argumen pembatalan | |||
| MA0033 | Desain | JANGAN Tag bidang instance dengan threadStaticAttribute | ✔️ | ||
| MA0035 | Penggunaan | Jangan gunakan metode threading berbahaya | ✔️ | ||
| MA0036 | Desain | Membuat kelas statis | ✔️ | ✔️ | |
| MA0037 | Penggunaan | Hapus pernyataan kosong | ✔️ | ✔️ | |
| MA0038 | Desain | Buat metode statis (usang, gunakan CA1822 sebagai gantinya) | ✔️ | ✔️ | |
| MA0039 | Keamanan | Jangan menulis metode validasi sertifikat Anda sendiri | ✔️ | ||
| MA0040 | Penggunaan | Meneruskan parameter cancellationToken ke metode yang mengambil satu | ✔️ | ✔️ | |
| MA0041 | Desain | Buat properti statis (usang, gunakan CA1822 sebagai gantinya) | ✔️ | ✔️ | |
| MA0042 | Desain | Jangan gunakan panggilan pemblokiran dalam metode async | ✔️ | ✔️ | |
| MA0043 | Penggunaan | Gunakan nama operator di ArgumentException | ✔️ | ✔️ | |
| MA0044 | Pertunjukan | Hapus panggilan tostring yang tidak berguna | ✔️ | ✔️ | |
| MA0045 | Desain | Jangan gunakan panggilan pemblokiran dalam metode sinkronisasi (perlu membuat metode panggilan async) | ✔️ | ||
| MA0046 | Desain | Gunakan EventHandler <T> untuk mendeklarasikan acara | ✔️ | ||
| MA0047 | Desain | Menyatakan jenis di namespaces | ✔️ | ||
| MA0048 | Desain | Nama file harus cocok dengan nama tipe | ✔️ | ||
| MA0049 | Desain | Jenis Nama seharusnya tidak cocok dengan berisi namespace | ✔️ | ||
| MA0050 | Desain | Validasi argumen dengan benar dalam metode iterator | ✔️ | ✔️ | |
| MA0051 | Desain | Metode terlalu panjang | ✔️ | ||
| MA0052 | Pertunjukan | Ganti enum konstan.tostring dengan nameof | ✔️ | ✔️ | |
| MA0053 | Desain | Membuat kelas disegel | ✔️ | ✔️ | |
| MA0054 | Desain | Embed pengecualian yang ditangkap sebagai innerexception | ✔️ | ||
| MA0055 | Desain | Jangan gunakan finalizer | ✔️ | ||
| MA0056 | Desain | JANGAN Hubungi Anggota yang Bergegas dalam Konstruktor | ✔️ | ||
| MA0057 | Penamaan | Nama kelas harus diakhiri dengan 'atribut' | ✔️ | ||
| MA0058 | Penamaan | Nama kelas harus diakhiri dengan 'pengecualian' | ✔️ | ||
| MA0059 | Penamaan | Nama kelas harus diakhiri dengan 'EventArgs' | ✔️ | ||
| MA0060 | Desain | Nilai yang dikembalikan oleh stream.read/stream.readasync tidak digunakan | ✔️ | ||
| MA0061 | Desain | Metode overrides tidak boleh mengubah nilai default | ✔️ | ✔️ | |
| MA0062 | Desain | Enum non-batung tidak boleh ditandai dengan "flagsattribute" | ✔️ | ||
| MA0063 | Pertunjukan | Gunakan di mana sebelum pesanan | ✔️ | ||
| MA0064 | Desain | Hindari mengunci pada instance yang dapat diakses secara publik | ✔️ | ||
| MA0065 | Pertunjukan | ValueType default.Equals atau HashCode digunakan untuk kesetaraan struct | ✔️ | ||
| MA0066 | Pertunjukan | Tabel hash jenis yang tidak ramah digunakan dalam tabel hash | ✔️ | ||
| MA0067 | Desain | Gunakan Guid.empty | ✔️ | ✔️ | |
| MA0068 | Desain | Nama parameter tidak valid untuk atribut nullable | ✔️ | ||
| MA0069 | Desain | Bidang statis non-konstan tidak boleh terlihat | ✔️ | ||
| MA0070 | Desain | Atribut usang harus mencakup penjelasan | ✔️ | ||
| MA0071 | Gaya | Hindari menggunakan yang berlebihan | ✔️ | ✔️ | |
| MA0072 | Desain | Jangan melempar dari blok akhirnya | ✔️ | ||
| MA0073 | Gaya | Hindari perbandingan dengan konstanta bool | ✔️ | ✔️ | |
| MA0074 | Penggunaan | Hindari metode yang sensitif terhadap budaya implisit | ✔️ | ✔️ | |
| MA0075 | Desain | Jangan gunakan tostring yang peka terhadap budaya | ✔️ | ||
| MA0076 | Desain | Jangan gunakan tostring yang peka terhadap kultur implisit dalam string interpolasi | ✔️ | ||
| MA0077 | Desain | Kelas yang menyediakan Equals (T) harus mengimplementasikan IEQuatble <T> | ✔️ | ✔️ | |
| MA0078 | Pertunjukan | Gunakan 'cast' bukannya 'pilih' untuk dilemparkan | ✔️ | ✔️ | |
| MA0079 | Penggunaan | Meneruskan pembatalan menggunakan .withcancellation () | ✔️ | ✔️ | |
| MA0080 | Penggunaan | Gunakan token pembatalan menggunakan .withcancellation () | |||
| MA0081 | Desain | Metode overrides tidak boleh menghilangkan kata kunci params | ✔️ | ✔️ | |
| MA0082 | Desain | Nan tidak boleh digunakan dalam perbandingan | ✔️ | ||
| MA0083 | Desain | Parameter konstruktorgumen harus ada di konstruktor | ✔️ | ||
| MA0084 | Desain | Variabel lokal tidak boleh menyembunyikan simbol lain | ✔️ | ||
| MA0085 | Penggunaan | Delegasi anonim tidak boleh digunakan untuk berhenti berlangganan dari acara | ✔️ | ||
| MA0086 | Desain | Jangan melempar dari finalizer | ✔️ | ||
| MA0087 | Desain | Parameter dengan atribut [defaultParametervalue] juga harus ditandai [opsional] | ✔️ | ||
| MA0088 | Desain | Gunakan [DefaultParameterValue] alih -alih [DefaultValue] | ✔️ | ||
| MA0089 | Pertunjukan | Mengoptimalkan penggunaan metode string | ✔️ | ✔️ | |
| MA0090 | Desain | Hapus Kosong Lain/Akhirnya Blokir | ✔️ | ||
| MA0091 | Penggunaan | Pengirim harus 'ini' misalnya acara | ✔️ | ✔️ | |
| MA0092 | Penggunaan | Pengirim harus 'null' untuk acara statis | ✔️ | ||
| MA0093 | Penggunaan | Eventargs tidak boleh nol | ✔️ | ✔️ | |
| MA0094 | Desain | Kelas yang menyediakan compareto (t) harus mengimplementasikan icomparable <t> | ✔️ | ||
| MA0095 | Desain | Kelas yang mengimplementasikan Iequatible <T> harus mengganti setara (objek) | ✔️ | ||
| MA0096 | Desain | Kelas yang mengimplementasikan IcomparaBle <T> juga harus mengimplementasikan Iequatible <T> | ✔️ | ||
| MA0097 | Desain | Kelas yang mengimplementasikan IcomparaBle <T> atau Icomparable harus mengganti operator perbandingan | ✔️ | ||
| MA0098 | Pertunjukan | Gunakan pengindeks, bukan metode LINQ | ✔️ | ✔️ | |
| MA0099 | Penggunaan | Gunakan nilai enum eksplisit bukan 0 | ✔️ | ||
| MA0100 | Penggunaan | Menunggu tugas sebelum membuang sumber daya | ✔️ | ||
| MA0101 | Penggunaan | String berisi akhir karakter garis implisit | ? | ✔️ | ✔️ |
| MA0102 | Desain | Jadikan anggota readonly | ✔️ | ✔️ | |
| MA0103 | Penggunaan | Gunakan SequenceEqual, bukan Operator Kesetaraan | ✔️ | ✔️ | |
| MA0104 | Desain | Jangan membuat tipe dengan nama dari bcl | |||
| MA0105 | Pertunjukan | Gunakan parameter lambda alih -alih menggunakan penutupan | ✔️ | ||
| MA0106 | Pertunjukan | Hindari penutupan dengan menggunakan kelebihan beban dengan parameter 'FactoryArgument' | ✔️ | ||
| MA0107 | Desain | Jangan gunakan objek yang peka terhadap budaya | |||
| MA0108 | Penggunaan | Hapus nilai argumen yang berlebihan | ✔️ | ✔️ | |
| MA0109 | Desain | Pertimbangkan menambahkan kelebihan beban dengan rentang <T> atau memori <T> | |||
| MA0110 | Pertunjukan | Gunakan generator sumber regex | ✔️ | ✔️ | |
| MA0111 | Pertunjukan | Gunakan string.create alih -alih formattableString | ✔️ | ✔️ | |
| MA0112 | Pertunjukan | Gunakan 'Count> 0' bukan 'any ()' | |||
| MA0113 | Desain | Gunakan DateTime.Unixepoch | ✔️ | ✔️ | |
| MA0114 | Desain | Gunakan DateTimeOffset.Unixepoch | ✔️ | ✔️ | |
| MA0115 | Penggunaan | Parameter komponen yang tidak diketahui | ✔️ | ||
| MA0116 | Desain | Parameter dengan atribut [SupplyParameterFromQuery] juga harus ditandai sebagai [parameter] | ✔️ | ✔️ | |
| MA0117 | Desain | Parameter dengan Atribut [EditorSequired] juga harus ditandai sebagai [parameter] | ✔️ | ✔️ | |
| MA0118 | Desain | Metode [jsinvokable] harus umum | ✔️ | ||
| MA0119 | Desain | Jsruntime tidak boleh digunakan dalam oninitialized atau oninitializedAsync | ✔️ | ||
| MA0120 | Pertunjukan | Gunakan InvokevoidAsync saat nilai yang dikembalikan tidak digunakan | ✔️ | ✔️ | |
| MA0121 | Desain | Jangan menimpa nilai parameter | |||
| MA0122 | Desain | Parameter dengan atribut [SupplyParameterFromQuery] hanya valid dalam komponen yang dapat dirutekan (@page) | ✔️ | ||
| MA0123 | Desain | Nomor urutan harus konstan | ✔️ | ||
| MA0124 | Desain | Jenis parameter log tidak valid | ✔️ | ||
| MA0125 | Desain | Daftar jenis parameter log berisi tipe yang tidak valid | ✔️ | ||
| MA0126 | Desain | Daftar jenis parameter log berisi duplikat | ✔️ | ||
| MA0127 | Penggunaan | Gunakan string.Equals bukannya pola | |||
| MA0128 | Penggunaan | Gunakan 'adalah' operator alih -alih sekuensequal | ✔️ | ✔️ | |
| MA0129 | Penggunaan | Menunggu tugas dalam menggunakan pernyataan | ✔️ | ||
| MA0130 | Penggunaan | GetType () tidak boleh digunakan pada instance System.Type | ✔️ | ||
| MA0131 | Penggunaan | Argumentnullexception.throwifnull tidak boleh digunakan dengan tipe yang tidak dapat dibatalkan | ✔️ | ||
| MA0132 | Desain | Jangan mengonversi secara implisit ke DateTimeOffset | ✔️ | ||
| MA0133 | Desain | Gunakan DateTimeOffset alih -alih mengandalkan konversi implisit | ✔️ | ||
| MA0134 | Penggunaan | Amati hasil panggilan async | ✔️ | ||
| MA0135 | Desain | Parameter log tidak memiliki jenis yang dikonfigurasi | |||
| MA0136 | Penggunaan | String mentah berisi karakter akhir yang implisit | ? | ✔️ | |
| MA0137 | Desain | Gunakan akhiran 'async' saat metode mengembalikan tipe yang menunggu | |||
| MA0138 | Desain | Jangan gunakan akhiran 'async' saat metode tidak mengembalikan tipe yang menunggu | |||
| MA0139 | Desain | Jenis parameter log tidak valid | ✔️ | ||
| MA0140 | Desain | Baik jika dan cabang lain memiliki kode yang identik | ✔️ | ||
| MA0141 | Penggunaan | Gunakan pencocokan pola alih -alih operator ketimpangan untuk pemeriksaan nol | ✔️ | ||
| MA0142 | Penggunaan | Gunakan pencocokan pola alih -alih operator kesetaraan untuk pemeriksaan nol | ✔️ | ||
| MA0143 | Desain | Parameter konstruktor primer harus dibaca hanya | ✔️ | ||
| MA0144 | Pertunjukan | Gunakan System.operatingsystem untuk memeriksa OS saat ini | ✔️ | ||
| MA0145 | Penggunaan | Metode Tanda Tangan untuk [unsafeaccessorTribute] tidak valid | ✔️ | ||
| MA0146 | Penggunaan | Nama harus diatur secara eksplisit pada fungsi lokal | ✔️ | ||
| MA0147 | Penggunaan | Hindari metode async void untuk delegasi | ✔️ | ||
| MA0148 | Penggunaan | Gunakan pencocokan pola alih -alih operator kesetaraan untuk nilai diskrit | ✔️ | ||
| MA0149 | Penggunaan | Gunakan pencocokan pola alih -alih operator ketimpangan untuk nilai diskrit | ✔️ | ||
| MA0150 | Desain | Jangan panggil objek default. Tostring secara eksplisit | ✔️ | ||
| MA0151 | Penggunaan | DebuggerdiSplay harus berisi anggota yang valid | ✔️ | ||
| MA0152 | Pertunjukan | Gunakan unwrap alih -alih menggunakan menunggu dua kali | ✔️ | ||
| MA0153 | Desain | Jangan mencatat simbol yang dihiasi dengan DataClasificationAttribute secara langsung | ✔️ | ||
| MA0154 | Desain | Gunakan langword dalam komentar XML | ✔️ | ✔️ | |
| MA0155 | Desain | Jangan gunakan metode void async | |||
| MA0156 | Desain | Gunakan akhiran 'async' saat metode mengembalikan iasyncenumerable <T> | |||
| MA0157 | Desain | Jangan gunakan akhiran 'async' saat metode tidak mengembalikan iasyncenumerable <t> | |||
| MA0158 | Pertunjukan | Gunakan System.threading.lock | ✔️ | ||
| MA0159 | Pertunjukan | Gunakan 'pesanan' alih -alih 'orderby' | ✔️ | ✔️ | |
| MA0160 | Pertunjukan | Gunakan ContainsKey, bukan TryGetValue | ✔️ | ||
| MA0161 | Penggunaan | Useshellexecute harus diatur secara eksplisit | |||
| MA0162 | Penggunaan | Gunakan proses. Kelebihan muatan dengan ProcessStartInfo | |||
| MA0163 | Penggunaan | Useshellexecute harus salah saat mengarahkan input atau output standar | ✔️ | ||
| MA0164 | Gaya | Gunakan tanda kurung untuk membuat pola tidak lebih jelas | ✔️ | ✔️ | |
| MA0165 | Penggunaan | Buat string yang diinterpolasi | ? | ✔️ | ✔️ |
| Pengenal | Aturan yang ditekan | Pembenaran |
|---|---|---|
MAS0001 | CA1822 | Suppress CA1822 pada metode yang dihiasi dengan atribut BenchmarkDotnet. |
MAS0002 | CA1822 | Suppress CA1822 pada metode yang dihiasi dengan atribut System.text.json seperti [jsonpropertyname] atau [jsoninclude]. |
MAS0003 | IDE0058 | Menekan IDE0058 pada tipe terkenal |