CA1806: Yöntem sonuçlarını yoksaymayın

Özellik Değer
Kural Kimliği CA1806
Başlık Metot sonuçlarını yoksaymayın
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Bu uyarının birkaç olası nedeni vardır:

  • Yeni bir nesne oluşturulur ancak hiçbir zaman kullanılmaz.

  • Yeni dize oluşturan ve döndüren bir yöntem çağrılır ve yeni dize hiçbir zaman kullanılmaz.

  • Hiç kullanılmayan bir veya hata kodu döndüren COM HRESULT veya P/Invoke yöntemi.

  • Hiç kullanılmayan bir sonuç döndüren dille tümleşik sorgu (LINQ) yöntemi.

Kural açıklaması

Gereksiz nesne oluşturma ve kullanılmayan nesnenin ilişkili çöp toplama işlemi performansı düşürür.

Dizeler sabittir ve çağırma yöntemindeki dize örneğini değiştirmek yerine dizenin yeni bir örneğini döndürme gibi String.ToUpper yöntemlerdir.

Yoksayma HRESULT veya hata kodu düşük kaynak koşullarına veya hata koşullarında beklenmeyen davranışlara yol açabilir.

LINQ yöntemlerinin yan etkileri olmadığı bilinmektedir ve sonuç yoksayılmamalıdır.

İhlalleri düzeltme

Bir yöntem, hiç kullanılmayan bir nesnenin yeni bir örneğini oluşturursa, örneği bağımsız değişken olarak başka bir yönteme geçirin veya örneği bir değişkene atayın. Nesne oluşturma işlemi gereksizse kaldırın.

-veya-

A yöntemi B yöntemini çağırır ancak B yönteminin döndürdüğü yeni dize örneğini kullanmıyorsa, örneği başka bir yönteme bağımsız değişken olarak geçirin veya örneği bir değişkene atayın. Veya gereksizse aramayı kaldırın.

-veya-

A yöntemi B yöntemini çağırır ancak yöntemin HRESULT döndürdüğü veya hata kodunu kullanmıyorsa, sonucu koşullu bir deyimde kullanın, sonucu bir değişkene atayın veya başka bir yönteme bağımsız değişken olarak geçirin.

-veya-

A LINQ yöntemi B yöntemini çağırır ancak sonucu kullanmıyorsa, sonucu koşullu bir deyimde kullanın, sonucu bir değişkene atayın veya başka bir yönteme bağımsız değişken olarak geçirin.

Uyarıların ne zaman bastırılması gerekiyor?

Nesne oluşturma eylemi bir amaca hizmet etmediği sürece bu kuraldan bir uyarıyı bastırmayın.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Çözümlemek için kod yapılandırma

Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.

Zorlamak için ek yöntemler

Bu kuralı, ek özel API'lerden gelen sonuçların kullanılabileceğini denetlemek için yapılandırabilirsiniz. Seçeneğin değeriadditional_use_results_methods olarak bir veya daha fazla yöntem belirtin. Birden çok yöntem adı belirtmek için, bunları ile |ayırın. Yöntem adı için izin verilebilen biçimler şunlardır:

Örneğin, CA1806 kuralının da adlı MyMethod1 bir yöntemden elde edilen sonucun kullanılabileceğini denetlemesi gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin.

dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1

Alternatif olarak, tam adı kullanarak belirsizliği kesinleştirme veya yalnızca bu ada sahip belirli bir yöntemin dahil olduğundan emin olun.

dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)

Örnek 1

Aşağıdaki örnekte çağrısının String.Trimsonucunu yoksayan bir sınıf gösterilmektedir.

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

Örnek 2

Aşağıdaki örnek , örnek 1 ihlalini String.Trim düzeltir ve sonucunu yeniden çağrıldığı değişkene atar.

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

Örnek 3

Aşağıdaki örnekte, oluşturduğu bir nesneyi kullanmayan bir yöntem gösterilmektedir.

Dekont

Bu ihlal Visual Basic'te yeniden oluşturulamaz.

public class Book
{
    public Book()
    {
    }

    public static Book CreateBook()
    {
        // Violates this rule
        new Book();
        return new Book();
    }
}

Örnek 4

Aşağıdaki örnek, bir nesnenin gereksiz oluşturulmasını kaldırarak Örnek 3 ihlalini düzeltir.

public class Book
{
    public Book()
    {
    }

    public static Book CreateBook()
    {
        return new Book();
    }
}