Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Property | Värde |
|---|---|
| Regel-ID | CA1806 |
| Title | Ignorera inte metodresultat |
| Kategori | Prestanda |
| Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
| Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Det finns flera möjliga orsaker till den här varningen:
- Ett nytt objekt skapas men används aldrig.
- En metod som skapar och returnerar en ny sträng anropas och den nya strängen används aldrig.
- En COM- eller P/Invoke-metod returnerar en
HRESULTeller felkod som aldrig används. - En linq-metod (language-integrated query) returnerar ett resultat som aldrig används.
- En
[Pure]metod anropas och returvärdet används aldrig.
Regelbeskrivning
Onödiga objekt skapas och den associerade skräpinsamlingen för det oanvända objektet försämrar prestandan.
Strängar är oföränderliga och metoder som String.ToUpper att returnera en ny instans av en sträng i stället för att ändra instansen av strängen i anropande metod.
Att ignorera HRESULT eller en felkod kan leda till låg resursförhållanden eller oväntat beteende i feltillstånd.
LINQ-metoder och metoder som kommenteras med PureAttribute är kända för att inte ha biverkningar, och resultatet bör inte ignoreras.
Så här åtgärdar du överträdelser
Om en metod skapar en ny instans av ett objekt som aldrig används skickar du instansen som ett argument till en annan metod eller tilldelar instansen till en variabel. Om objektet inte skapas tar du bort det.
-eller-
Om metoden A anropar metod B men inte använder den nya stränginstansen som metod B returnerar skickar du instansen som ett argument till en annan metod eller tilldelar instansen till en variabel. Eller ta bort anropet om det inte behövs.
-eller-
Om metod A anropar metod B men inte använder HRESULT den eller-felkod som metoden returnerar använder du resultatet i en villkorssats, tilldelar resultatet till en variabel eller skickar det som ett argument till en annan metod.
-eller-
Om metod A anropar en LINQ eller ren metod B men inte använder resultatet använder du resultatet i en villkorssats, tilldelar resultatet till en variabel eller skickar det som ett argument till en annan metod.
När du ska ignorera varningar
Utelämna inte en varning från den här regeln om inte åtgärden att skapa objektet har något syfte.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Konfigurera kod för analys
Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.
Ytterligare metoder att framtvinga
Du kan konfigurera den här regeln för att kontrollera att resultat från ytterligare anpassade API:er används. Ange en eller flera metoder som värdet för additional_use_results_methods alternativet. Om du vill ange flera metodnamn separerar du dem med |. De tillåtna formaten för metodnamnet är:
- Endast metodnamn (som innehåller alla metoder med det namnet, oavsett vilken typ eller namnrymd de innehåller).
- Fullständigt kvalificerat namn i dokumentations-ID-format med ett valfritt
M:prefix.
Om du till exempel vill ange regeln CA1806 bör du också kontrollera att resultatet från en metod med namnet MyMethod1 används lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet.
dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1
Eller använd det fullständigt kvalificerade namnet för att skilja eller se till att endast en specifik metod med det namnet ingår.
dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)
Exempel 1
I följande exempel visas en klass som ignorerar resultatet av att anropa 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
I följande exempel åtgärdas överträdelsen genom att resultatet från String.Trim tilldelas tillbaka till den variabel på vilken det anropades.
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
Exempel 2
I följande exempel visas en metod som inte använder ett objekt som skapas.
Kommentar
Den här överträdelsen kan inte återskapas i Visual Basic.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Violates this rule.
new Book();
return new Book();
}
}
I följande exempel åtgärdas överträdelsen genom att ett objekt inte skapas i onödan.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Fixes the violation.
return new Book();
}
}