Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA1861 |
| Titel | Vermeiden von konstanten Arrays als Argumente |
| Kategorie | Leistung |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Als Vorschlag |
| Anwendbare Sprachen | C# und Visual Basic |
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. Wenn Sie dies tun, könnte dies ein "Breaking Change" darstellen. In diesem Fall ist es besser, die Warnung stattdessen zu unterdrücken.
So beheben Sie Verstöße
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 Kompilierungszeit und nicht zur Laufzeit aufgelöst, wodurch Code leistungsfähiger wird.
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 Leistungseinbußen, die durch die Erstellung eines konstanten Arrays bei jedem Aufruf entstehen.
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 auf none in der Konfigurationsdatei fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.