Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aturan keandalan mendukung pustaka dan keandalan aplikasi, seperti memori dan penggunaan utas yang benar. Aturan keandalan meliputi:
| Peraturan | Deskripsi |
|---|---|
| CA2000: Membuang objek sebelum kehilangan cakupan | Karena peristiwa luar biasa mungkin terjadi yang akan mencegah finalizer objek berjalan, objek harus dibuang secara eksplisit sebelum semua referensi ke objek berada di luar cakupan. |
| CA2002: Jangan mengunci objek dengan identitas lemah | Objek dikatakan memiliki identitas yang lemah ketika dapat langsung diakses di seluruh batas domain aplikasi. Utas yang mencoba memperoleh kunci pada objek yang memiliki identitas lemah dapat diblokir oleh utas kedua di domain aplikasi berbeda yang memiliki kunci pada objek yang sama. |
| CA2007: Jangan langsung menunggu Tugas | Metode asinkron menungguTask secara langsung. |
| CA2008: Jangan membuat tugas tanpa melewati taskScheduler | Operasi pembuatan atau kelanjutan tugas menggunakan metode kelebihan beban yang tidak menentukan parameter TaskScheduler. |
| CA2009: Jangan panggil ToImmutableCollection pada nilai ImmutableCollection | metode ToImmutable tidak perlu dipanggil pada koleksi yang tidak dapat diubah dari namespace System.Collections.Immutable. |
| CA2011: Jangan tetapkan properti dalam setternya | Properti secara tidak sengaja diberi nilai dalam aksesor set sendiri. |
| CA2012: Gunakan ValueTasks dengan benar | ValueTasks yang dikembalikan dari pemanggilan anggota dimaksudkan untuk langsung ditunggu. Upaya untuk menggunakan ValueTask beberapa kali atau untuk langsung mengakses hasil seseorang sebelum diketahui selesai dapat mengakibatkan pengecualian atau kerusakan. Mengabaikan ValueTask seperti itu kemungkinan merupakan indikasi bug fungsi dan dapat menurunkan performa. |
| CA2013: Jangan gunakan ReferenceEquals dengan jenis nilai | Saat membandingkan nilai menggunakan System.Object.ReferenceEquals, jika objA dan objB adalah jenis nilai, nilai tersebut dikotak sebelum diteruskan ke metode ReferenceEquals. Ini berarti bahwa bahkan jika objA dan objB mewakili instans yang sama dari jenis nilai, metode ReferenceEquals tetap mengembalikan false. |
| CA2014: Jangan gunakan stackalloc dalam perulangan. | Ruang tumpukan yang dialokasikan oleh stackalloc hanya dirilis pada akhir pemanggilan metode saat ini. Menggunakannya dalam perulangan dapat mengakibatkan pertumbuhan tumpukan yang tidak terbatas dan kondisi luapan tumpukan akhirnya. |
| CA2015: Jangan tentukan finalizer untuk jenis yang berasal dari MemoryManager<T> | Menambahkan finalizer ke jenis yang berasal dari MemoryManager<T> dapat mengizinkan memori dibebaskan saat masih digunakan oleh Span<T>. |
| CA2016: Teruskan parameter CancellationToken ke metode yang mengambil satu | Teruskan parameter CancellationToken ke metode yang mengambilnya untuk memastikan pemberitahuan pembatalan operasi disebarkan dengan benar, atau teruskan CancellationToken.None secara eksplisit untuk menunjukkan dengan sengaja tidak menyebarkan token. |
| CA2017: Jumlah parameter tidak cocok | Jumlah parameter yang disediakan dalam templat pesan pengelogan tidak cocok dengan jumlah tempat penampung bernama. |
CA2018: Argumen count ke Buffer.BlockCopy harus menentukan jumlah byte yang akan disalin |
Saat menggunakan Buffer.BlockCopy, argumen count menentukan jumlah byte yang akan disalin. Anda hanya boleh menggunakan Array.Length untuk argumen count pada array yang elemennya berukuran persis satu byte.
byte, sbyte, dan array bool memiliki elemen yang berukuran satu byte. |
CA2019: bidang ThreadStatic tidak boleh menggunakan inisialisasi sebaris |
Bidang yang dianotasikan dengan ThreadStaticAttribute diinisialisasi sebaris atau secara eksplisit dalam konstruktor static (Shared di Visual Basic). |
| CA2020: Mencegah perubahan perilaku yang disebabkan oleh operator bawaan IntPtr/UIntPtr | Beberapa operator bawaan yang ditambahkan di .NET 7 bereaksi berbeda dari operator yang ditentukan pengguna di .NET 6 dan versi yang lebih lama. Beberapa operator yang digunakan untuk melemparkan dalam konteks yang tidak dicentang saat meluap tidak meluap lagi kecuali dibungkus dalam konteks yang diperiksa. Beberapa operator yang sebelumnya tidak memberikan konteks yang diperiksa sekarang dilemparkan kecuali dibungkus dalam konteks yang tidak dicentang. |
| CA2021: Jangan panggil Enumerable.Cast<T> atau Enumerable.OfType<T> dengan jenis yang tidak kompatibel | Panggilan ke Enumerable.Cast<TResult>(IEnumerable) atau Enumerable.OfType<TResult>(IEnumerable) menentukan parameter jenis yang tidak kompatibel dengan jenis koleksi input. |
| CA2022: Hindari bacaan yang tidak pasti dengan Stream.Read | Panggilan ke Stream.Read mungkin mengembalikan lebih sedikit byte daripada yang diminta, menghasilkan kode yang tidak dapat diandalkan jika nilai pengembalian tidak dicentang. |
| CA2023: Kurung kurawal tidak valid dalam templat pesan | Templat pesan pencatatan menggunakan kurung kurawal { dan } untuk menunjukkan placeholder bernama untuk nilai. Penggunaan kurung kurawal yang tidak valid dalam templat pesan dapat mengakibatkan pengecualian runtime atau perilaku pencatatan log yang tidak terduga. |
| CA2024: Jangan gunakan StreamReader.EndOfStream dalam metode asinkron | Properti StreamReader.EndOfStream dapat menyebabkan pemblokiran sinkron yang tidak diinginkan ketika tidak ada data yang di-buffer. Sebagai gantinya, gunakan StreamReader.ReadLineAsync() secara langsung, yang mengembalikan null saat mencapai akhir aliran. |
CA2025: Jangan meneruskan IDisposable instans ke dalam tugas yang tidak diawasi |
Tugas yang tidak ditunggu yang menggunakan instans IDisposable mungkin akan terus menggunakan instans tersebut lama setelah dibuang. Pastikan tugas yang menggunakan instans tersebut selesai sebelum instans dibuang. |
| CA2026: Lebih suka JsonElement.Parse daripada JsonDocument.Parse(). RootElement | Lebih efisien untuk menelepon JsonElement.Parse langsung daripada memanggil JsonDocument.Parse().RootElement. |
Berkolaborasi dengan kami di GitHub
Sumber untuk konten ini dapat ditemukan di GitHub, yang juga dapat Anda gunakan untuk membuat dan meninjau masalah dan menarik permintaan. Untuk informasi selengkapnya, lihat panduan kontributor kami.