Share via


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