Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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 10 | 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 vrací
HRESULTkó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
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 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 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
{
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();
}
}