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 | 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.