CA1806: Jangan abaikan hasil metode
Properti | Nilai |
---|---|
ID Aturan | CA1806 |
Judul | Jangan abaikan hasil metode |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
Penyebab
Ada beberapa kemungkinan alasan untuk peringatan ini:
- Objek baru dibuat tetapi tidak pernah digunakan.
- Metode yang membuat dan mengembalikan string baru dipanggil dan string baru tidak pernah digunakan.
- Metode COM atau P/Invoke yang mengembalikan
HRESULT
atau kode kesalahan yang tidak pernah digunakan. - Metode kueri terintegrasi bahasa (LINQ) yang mengembalikan hasil yang tidak pernah digunakan.
Deskripsi aturan
Pembuatan objek yang tidak perlu dan pengumpulan sampah terkait dari objek yang tidak digunakan menurunkan performa.
String tidak dapat diubah dan metode seperti String.ToUpper mengembalikan instans baru dari string, bukan mengubah instans string dalam metode panggilan.
Mengabaikan HRESULT
atau kode kesalahan dapat menyebabkan perilaku tak terduga dalam kondisi kesalahan atau kondisi sumber daya rendah.
Metode LINQ diketahui tidak memiliki efek samping, dan hasilnya tidak boleh diabaikan.
Cara memperbaiki pelanggaran
Jika metode membuat instans baru dari objek yang tidak pernah digunakan, teruskan instans sebagai argumen ke metode lain atau tetapkan instans ke variabel. Jika pembuatan objek tidak diperlukan, hapus.
-atau-
Jika metode A memanggil metode B, tetapi tidak menggunakan instans string baru yang dikembalikan oleh metode B, teruskan instans sebagai argumen ke metode lain atau tetapkan instans ke variabel. Atau hapus panggilan jika tidak perlu.
-atau-
Jika metode A memanggil metode B, tetapi tidak menggunakan HRESULT
atau kode kesalahan yang dikembalikan metode, gunakan hasil dalam pernyataan kondisional, tetapkan hasilnya ke variabel, atau teruskan sebagai argumen ke metode lain.
-atau-
Jika metode LINQ A memanggil metode B, tetapi tidak menggunakan hasilnya, gunakan hasilnya dalam pernyataan kondisional, tetapkan hasilnya ke variabel, atau teruskan sebagai argumen ke metode lain.
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini kecuali tindakan membuat objek memiliki tujuan tertentu.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Mengonfigurasi kode yang akan dianalisis
Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.
Metode tambahan untuk diberlakukan
Anda dapat mengonfigurasi aturan ini untuk memeriksa apakah hasil dari API kustom tambahan digunakan. Tentukan satu atau beberapa metode sebagai nilai opsi additional_use_results_methods
. Untuk menentukan beberapa nama metode, pisahkan dengan |
. Format yang diizinkan untuk nama metode adalah:
- Nama metode saja (yang akan mencakup semua metode dengan nama tersebut, terlepas dari jenis atau namespace yang berisi).
- Nama yang sepenuhnya memenuhi syarat dalam format ID dokumentasi, dengan awalan
M:
opsional.
Misalnya, untuk menentukan bahwa aturan CA1806 juga harus memeriksa apakah hasil dari metode bernama MyMethod1
digunakan, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda.
dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1
Atau, gunakan nama yang sepenuhnya memenuhi syarat untuk membedakan atau memastikan bahwa hanya metode tertentu dengan nama tersebut yang disertakan.
dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)
Contoh 1
Contoh berikut menunjukkan kelas yang mengabaikan hasil panggilan String.Trim.
public class Book
{
private readonly string? _Title;
public Book(string title)
{
if (title != null)
{
// Violates this rule
title.Trim();
}
_Title = title;
}
public string? Title
{
get { return _Title; }
}
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
' Violates this rule
title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
Contoh 2
Contoh berikut memperbaiki pelanggaran Contoh 1 dengan menetapkan hasil String.Trim kembali ke variabel yang dipanggil.
public class Book
{
private readonly string? _Title;
public Book(string title)
{
if (title != null)
{
title = title.Trim();
}
_Title = title;
}
public string? Title
{
get { return _Title; }
}
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
title = title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
Contoh 3
Contoh berikut menunjukkan metode yang tidak menggunakan objek yang dibuat.
Catatan
Pelanggaran ini tidak dapat direproduksi di Visual Basic.
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
// Violates this rule
new Book();
return new Book();
}
}
Contoh 4
Contoh berikut memperbaiki pelanggaran Contoh 3 dengan menghapus pembuatan objek yang tidak perlu.
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
return new Book();
}
}