Udostępnij przez


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