Teilen über


CA1861: Vermeiden von konstanten Arrays als Argumente

Eigenschaft Wert
Regel-ID CA1861
Titel Vermeiden von konstanten Arrays als Argumente
Kategorie Leistung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Als Vorschlag

Ursache

Ein konstantes Array von Literalwerten wird über einen regulären Aufruf oder einen Erweiterungsmethodenaufruf an eine Methode übergeben.

Regelbeschreibung

Konstante Arrays, die als Argumente übergeben werden, werden nicht wiederverwendet, wenn sie wiederholt aufgerufen werden. Dies impliziert, dass jedes Mal ein neues Array erstellt wird. Wenn das übergebene Array innerhalb der aufgerufenen Methode nicht mutiert wird, sollten Sie es in ein Feld des Typs static readonly extrahieren, um die Leistung zu verbessern.

Hinweis

Wenn die aufgerufene Methode das übergebene Array mutiert oder Sie nicht sicher sind, ob die Methode das Array mutieren würde, extrahieren Sie das Array nicht in ein Feld des Typs static readonly. Falls Sie dies tun, könnte dies ein Breaking Change sein. In diesem Fall ist es besser, die Warnung stattdessen zu unterdrücken.

Behandeln von Verstößen

Extrahieren Sie konstante Arrays in Felder des Typs static readonly, wenn das übergebene Array innerhalb der aufgerufenen Methode nicht mutiert wird.

Das folgende Beispiel zeigt einen Verstoß gegen die Regel:

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

Das folgende Beispiel zeigt, wie der Verstoß gegen diese Regel behoben wird, indem das Argument in ein Feld des Typs static readonly extrahiert wird.

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

Nun wird der Wert des Arrays zur Kompilierzeit und nicht zur Laufzeit aufgelöst, sodass der Code leistungsfähiger ist.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie einen Verstoß gegen diese Regel unter folgenden Bedingungen:

  • Der Aufruf wird nur einmal ausgeführt.
  • Das Array kann innerhalb der aufgerufenen Methode mutiert werden, oder Sie sind sich nicht sicher, ob es mutiert.
  • Sie sind nicht besorgt über die Auswirkungen der Erstellung eines konstanten Arrays für jeden Aufruf auf die Leistung.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.