CA1806: Neignorujte výsledky metody

Vlastnost Hodnota
ID pravidla CA1806
Název Neignorujte výsledky metody
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Nenarušující
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

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 vrací HRESULT kód nebo kód chyby, který se nikdy nepoužívá.
  • Metoda LINQ (Language-Integrated Query) vrací výsledek, který se nikdy nepoužívá.
  • Volá se [Pure] metoda a návratová hodnota se nikdy nepoužívá.

Popis pravidla

Zbytečné vytváření objektu a související správa paměti nepoužívaného objektu zhoršují výkon.

Řetězce jsou neměnné a metody, jako je String.ToUpper, vracejí novou instanci řetězce místo toho, aby upravovaly instanci řetězce v volající metodě.

Ignorování HRESULT nebo chyba kódu může vést k nedostatku prostředků nebo neočekávanému chování za chybových podmínek.

Metody LINQ a metody anotované PureAttribute pomocí 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 A volá LINQ nebo čistou 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 samotné vytvoření objektu neslouží nějaké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.

Například, pokud chcete zadat, aby pravidlo CA1806 také zkontrolovalo, zda je použit výsledek z metody pojmenované MyMethod1, přidejte do souboru .editorconfig ve vašem 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
{
    public Book(string title)
    {
        // Violates this rule.
        title?.Trim();

        Title = title;
    }

    public string? Title { get; }
}
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

Následující příklad opraví porušení tím, že přiřadí výsledek String.Trim zpět proměnné, na kterou byla volána.

public class Book
{
    public Book(string title)
    {
        // Fixes the violation.
        Title = title?.Trim();
    }

    public string? Title { get; }
}
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 2

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

Následující příklad řeší porušení tím, že odstraní nepotřebné vytvoření objektu.

public class Book
{
    public Book() { }

    public static Book CreateBook()
    {
        // Fixes the violation.
        return new Book();
    }
}