Bagikan melalui


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 8 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();
    }
}