Share via


CA1806: Neignorujte výsledky metody

Vlastnost Hodnota
ID pravidla CA1806
Název Neignorujte výsledky metody
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Toto upozornění může mít několik možných důvodů:

  • Vytvoří se nový objekt, ale nikdy se nepoužívá.

  • Metoda, která vytvoří a vrátí nový řetězec, je volána a nový řetězec se nikdy nepoužívá.

  • Metoda COM nebo P/Invoke, která vrací HRESULT kód chyby, který se nikdy nepoužívá.

  • Metoda LINQ (Language-Integrated Query), která vrací výsledek, který se nikdy nepoužívá.

Popis pravidla

Nepotřebné vytvoření objektu a související uvolňování paměti nepoužívaného objektu snižují výkon.

Řetězce jsou neměnné a metody, jako String.ToUpper je například vrácení nové instance řetězce místo úpravy instance řetězce ve volající metodě.

Ignorování HRESULT nebo kód chyby může vést k nízkým podmínkám prostředků nebo neočekávanému chování v chybových podmínkách.

Metody LINQ jsou známé, že nemají vedlejší účinky a výsledek by neměl být ignorován.

Jak opravit porušení

Pokud metoda vytvoří novou instanci objektu, který se nikdy nepoužívá, předejte instanci jako argument jiné metodě nebo přiřaďte instanci proměnné. Pokud vytvoření objektu není nutné, odeberte ho.

nebo

Pokud metoda A volá metodu B, ale nepoužívá novou instanci řetězce, která metoda B vrátí, předejte instanci jako argument jiné metodě nebo přiřaďte instanci proměnné. Nebo hovor odeberte, pokud není potřeba.

nebo

Pokud metoda A volá metodu B, ale nepoužívá HRESULT kód chyby, který metoda vrací, použijte výsledek v podmíněném příkazu, přiřaďte výsledek proměnné nebo jej předejte jako argument jiné metodě.

nebo

Pokud metoda LINQ A volá metodu B, ale nepoužívá výsledek, použijte výsledek v podmíněném příkazu, přiřaďte výsledek proměnné nebo jej předejte jako argument jiné metodě.

Kdy potlačit upozornění

Nepotlačujte upozornění z tohoto pravidla, pokud nečiní vytvoření objektu k určitému účelu.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Konfigurace kódu pro analýzu

Pomocí následující možnosti nakonfigurujte, ve kterých částech základu kódu se má toto pravidlo spouštět.

Další metody vynucení

Toto pravidlo můžete nakonfigurovat tak, aby kontrolovali, jestli se používají výsledky z dalších vlastních rozhraní API. Zadejte jednu nebo více metod jako hodnotuadditional_use_results_methods možnosti. Chcete-li zadat více názvů metod, oddělte je pomocí |. Povolené formáty pro název metody jsou:

  • Pouze název metody (který bude obsahovat všechny metody s tímto názvem bez ohledu na jejich typ nebo obor názvů).
  • Plně kvalifikovaný název ve formátu ID dokumentace s volitelnou M: předponou.

Pokud chcete například zadat pravidlo CA1806, mělo by také zkontrolovat, jestli se používá výsledek z pojmenované MyMethod1 metody, přidejte do souboru .editorconfig v projektu následující dvojici klíč-hodnota.

dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1

Nebo použijte plně kvalifikovaný název k nejednoznačnosti nebo se ujistěte, že je zahrnuta pouze konkrétní metoda s tímto názvem.

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

Příklad 1

Následující příklad ukazuje třídu, která ignoruje výsledek volání 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

Příklad 2

Následující příklad opraví porušení příkladu 1 přiřazením výsledku String.Trim zpět proměnné, na kterou byla volána.

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

Příklad 3

Následující příklad ukazuje metodu, která nepoužívá objekt, který vytvoří.

Poznámka:

Toto porušení nelze reprodukovat v jazyce Visual Basic.

public class Book
{
    public Book()
    {
    }

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

Příklad 4

Následující příklad opraví porušení příkladu 3 odebráním nepotřebného vytvoření objektu.

public class Book
{
    public Book()
    {
    }

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