CA1861: Undvik konstanta matriser som argument
Property | Värde |
---|---|
Regel-ID | CA1861 |
Title | Undvik konstanta matriser som argument |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En konstant matris med literalvärden skickas till en metod via anrop eller anrop av tilläggsmetod.
Regelbeskrivning
Konstanta matriser som skickas som argument återanvänds inte när de anropas upprepade gånger, vilket innebär att en ny matris skapas varje gång. Om den skickade matrisen inte är muterad inom den anropade metoden kan du överväga att extrahera den till ett static readonly
fält för att förbättra prestandan.
Kommentar
Om den anropade metoden muterar den skickade matrisen eller om du inte är säker på om metoden skulle mutera matrisen ska du inte extrahera matrisen till ett static readonly
fält. Att göra det kan vara en icke-bakåtkompatibel förändring. I det här fallet är det bättre att ignorera varningen i stället.
Så här åtgärdar du överträdelser
Extrahera konstanta matriser till static readonly
fält om den skickade matrisen inte är muterad inom den anropade metoden.
I följande exempel visas ett brott mot regeln:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
I följande exempel visas hur överträdelsen av den här regeln åtgärdas genom att extrahera argumentet till ett static readonly
fält.
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 löses värdet för matrisen vid kompileringstillfället i stället för vid körning, vilket gör koden mer högpresterande.
När du ska ignorera varningar
Undertryck en överträdelse av den här regeln om:
- Anropet körs bara en gång.
- Matrisen kan vara muterad inom den anropade metoden, eller så är du inte säker på om den skulle muteras.
- Du bryr dig inte om prestandapåverkan av att skapa en konstant matris för varje anrop.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.