CA1861: Unikaj tablic stałych jako argumentów
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1861 |
Tytuł | Unikaj stałych tablic jako argumentów |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Stała tablica wartości literałów jest przekazywana do metody za pośrednictwem zwykłego wywołania lub wywołania metody rozszerzenia.
Opis reguły
Tablice stałe przekazywane jako argumenty nie są ponownie używane podczas wywoływanego wielokrotnie, co oznacza, że nowa tablica jest tworzona za każdym razem. Jeśli przekazana tablica nie jest zmutowana w ramach wywoływanej metody, rozważ wyodrębnienie jej do static readonly
pola w celu zwiększenia wydajności.
Uwaga
Jeśli wywołana metoda wycisza przekazaną tablicę lub jeśli nie masz pewności, czy metoda zmutuje tablicę static readonly
, nie wyodrębnij tablicy do pola. Może to być zmiana powodująca niezgodność. W takim przypadku lepiej jest pominąć ostrzeżenie.
Jak naprawić naruszenia
Wyodrębnij tablice stałe do static readonly
pól, jeśli przekazana tablica nie jest zmutowana w ramach wywoływanej metody.
W poniższym przykładzie pokazano naruszenie reguły:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
W poniższym przykładzie pokazano, jak naruszenie tej reguły zostało naprawione przez wyodrębnienie argumentu static readonly
do pola.
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
Teraz wartość tablicy jest rozpoznawana w czasie kompilacji, a nie w czasie wykonywania, co sprawia, że kod jest bardziej wydajny.
Kiedy pomijać ostrzeżenia
Pomiń naruszenie tej reguły, jeśli:
- Wywołanie jest uruchamiane tylko raz.
- Tablica może być zmutowana w wywoływanej metodzie lub nie masz pewności, czy zostanie ona zmutowana.
- Nie martwisz się o wpływ wydajności tworzenia tablicy stałej dla każdego wywołania.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.