Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA1806 |
| Titel | Methoderesultaten niet negeren |
| Categorie | Prestaties |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als suggestie |
| Toepasselijke talen | C# en Visual Basic |
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 retourneert een
HRESULTof foutcode die nooit wordt gebruikt. - Een LINQ-methode (Language-Integrated Query) retourneert een resultaat dat nooit wordt gebruikt.
- Er wordt een
[Pure]methode aangeroepen en de retourwaarde wordt nooit gebruikt.
Beschrijving van regel
Onnodige objectcreatie en de bijbehorende afvalverzameling van de ongebruikte objecten verminderen de prestaties.
Tekenreeksen zijn onveranderbaar en methoden zoals String.ToUpper retourneren een nieuw exemplaar van een tekenreeks, in plaats van het exemplaar van de tekenreeks in de aanroepende methode te wijzigen.
HRESULT of een foutcode negeren kan leiden tot omstandigheden met weinig resources of onverwacht gedrag in foutsituaties.
LINQ-methoden en methoden die zijn geannoteerd met PureAttribute staan bekend als zijnde zonder bijwerkingen en het resultaat mag niet worden genegeerd.
Hoe schendingen op te lossen
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 aanmaken van 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 methode A een LINQ of pure 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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.
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 het documentatie-ID-formaat, 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
{
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
In het volgende voorbeeld wordt de schending opgelost door het resultaat van String.Trim terug te wijzen aan de variabele waarop deze is aangeroepen.
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
Voorbeeld 2
In het volgende voorbeeld wordt een methode getoond die geen gebruik maakt van het object dat het creëert.
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();
}
}
In het volgende voorbeeld wordt de schending opgelost door het onnodig maken van een object te verwijderen.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Fixes the violation.
return new Book();
}
}