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