CA1806: Methoderesultaten niet negeren
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1806 |
Titel | Methoderesultaten niet negeren |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Er zijn verschillende mogelijke redenen voor deze waarschuwing:
Er wordt een nieuw object gemaakt, maar nooit gebruikt.
Een methode die een nieuwe tekenreeks maakt en retourneert, wordt aangeroepen en de nieuwe tekenreeks wordt nooit gebruikt.
Een COM- of P/Invoke-methode die een
HRESULT
of foutcode retourneert die nooit wordt gebruikt.Een LINQ-methode (Language-Integrated Query) die een resultaat retourneert dat nooit wordt gebruikt.
Beschrijving van regel
Onnodig object maken en de bijbehorende garbagecollection van de ongebruikte object de prestaties verminderen.
Tekenreeksen zijn onveranderbaar en methoden zoals String.ToUpper het retourneren van een nieuw exemplaar van een tekenreeks in plaats van het exemplaar van de tekenreeks in de aanroepmethode te wijzigen.
HRESULT
Negeren of een foutcode kan leiden tot omstandigheden met weinig resources of onverwacht gedrag in foutvoorwaarden.
LINQ-methoden zijn bekend dat ze geen bijwerkingen hebben en het resultaat mag niet worden genegeerd.
Schendingen oplossen
Als een methode een nieuw exemplaar maakt van een object dat nooit wordt gebruikt, geeft u het exemplaar door als argument aan een andere methode of wijst u het exemplaar toe aan een variabele. Als het object niet nodig is, verwijdert u het.
– of –
Als methode A methode B aanroept, maar niet het nieuwe tekenreeksexemplaren gebruikt dat door methode B wordt geretourneerd, geeft u het exemplaar door als argument aan een andere methode of wijst u het exemplaar toe aan een variabele. Of verwijder de aanroep als dit niet nodig is.
– of –
Als methode A methode B aanroept, maar niet de HRESULT
of foutcode gebruikt die door de methode wordt geretourneerd, gebruikt u het resultaat in een voorwaardelijke instructie, wijst u het resultaat toe aan een variabele of geeft u het als argument door aan een andere methode.
– of –
Als een LINQ-methode A methode B aanroept, maar het resultaat niet gebruikt, gebruikt u het resultaat in een voorwaardelijke instructie, wijst u het resultaat toe aan een variabele of geeft u het als argument door aan een andere methode.
Wanneer waarschuwingen onderdrukken
Onderdrukt geen waarschuwing van deze regel, tenzij de handeling van het maken van het object een bepaald doel heeft.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Code configureren om te analyseren
Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.
Aanvullende methoden om af te dwingen
U kunt deze regel configureren om te controleren of de resultaten van aanvullende aangepaste API's worden gebruikt. Geef een of meer methoden op als de waarde van de additional_use_results_methods
optie. Als u meerdere methodenamen wilt opgeven, scheidt u deze met |
. De toegestane indelingen voor de methodenaam zijn:
- Alleen methodenaam (die alle methoden met die naam bevat, ongeacht het type of de naamruimte).
- Volledig gekwalificeerde naam in de indeling van de documentatie-id, met een optioneel
M:
voorvoegsel.
Als u bijvoorbeeld wilt opgeven dat regel CA1806 ook moet controleren of het resultaat van een benoemde MyMethod1
methode wordt gebruikt, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project.
dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1
Of gebruik de volledig gekwalificeerde naam om ondubbelzinnig te zijn of zorg ervoor dat alleen een specifieke methode met die naam is opgenomen.
dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)
Voorbeeld 1
In het volgende voorbeeld ziet u een klasse die het resultaat van het aanroepen String.Trimnegeert.
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
Voorbeeld 2
In het volgende voorbeeld wordt de schending van voorbeeld 1 opgelost door het resultaat van String.Trim terug te wijzen aan de variabele waarop deze is aangeroepen.
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
Voorbeeld 3
In het volgende voorbeeld ziet u een methode die geen object gebruikt dat wordt gemaakt.
Notitie
Deze schending kan niet worden gereproduceerd in Visual Basic.
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
// Violates this rule
new Book();
return new Book();
}
}
Voorbeeld 4
In het volgende voorbeeld wordt de schending van voorbeeld 3 opgelost door het onnodig maken van een object te verwijderen.
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
return new Book();
}
}