CA1861: Vermijd constante matrices als argumenten

Eigenschap Waarde
Regel-id CA1861
Titel Vermijd constante matrices als argumenten
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

Een constante array met letterlijke waarden wordt doorgegeven aan een methode via regelmatige aanroep of uitbreidingsmethode-aanroep.

Beschrijving van regel

Constante matrices die als argumenten worden doorgegeven, worden niet opnieuw gebruikt wanneer ze herhaaldelijk worden aangeroepen, wat impliceert dat er telkens een nieuwe matrix wordt gemaakt. Als het doorgegeven array niet wordt aangepast binnen de aangeroepen methode, kunt u overwegen het naar een static readonly-veld te extraheren om de prestaties te verbeteren.

Notitie

Als de aangeroepen methode de doorgegeven matrix muteert of als u niet zeker weet of de methode de matrix zou muteren, moet u de matrix niet uitpakken naar een static readonly veld. Dit kan een belangrijke wijziging zijn. In dit geval is het beter om de waarschuwing te onderdrukken.

Hoe schendingen op te lossen

Extraheer constante matrices naar static readonly velden als de doorgegeven matrix niet wordt gedempt binnen de aangeroepen methode.

In het volgende voorbeeld ziet u een schending van de regel:

// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})

In het volgende voorbeeld ziet u hoe de schending van deze regel is opgelost door het argument uit te pakken in een static readonly veld.

private static readonly string[] array = new[] { "Hello" , "world!" };

private string GetMessage()
{
    return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}

Private Function GetMessage() As String
    Return String.Join(" ", array)
End Function

Nu wordt de waarde van de matrix opgelost tijdens het compileren in plaats van tijdens runtime, waardoor code beter presteert.

Wanneer waarschuwingen onderdrukken

Een schending van deze regel onderdrukken als:

  • De aanroep wordt slechts eenmaal uitgevoerd.
  • De array kan binnen de aangeroepen methode worden gewijzigd, of u weet niet zeker of deze zou worden gewijzigd.
  • U bent niet bezorgd over de prestatiedruk van het creëren van een constante array voor elke aanroep.

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 CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861

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.CA1861.severity = none

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.