Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1861 |
| Tytuł | Unikaj stałych tablic jako argumentów |
| Kategoria | Wydajność |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
| Zastosowane języki | C# i Visual Basic |
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
Stałe tablice przekazywane jako argumenty nie są ponownie używane, gdy są wywoływane wielokrotnie, co oznacza, że nowa tablica jest tworzona za każdym razem. Jeśli przekazana tablica nie jest zmodyfikowana w wywoływanej metodzie, rozważ wyodrębnienie jej do static readonly pola, aby zwiększyć wydajność.
Uwaga
Jeśli wywołana metoda modyfikuje przekazaną tablicę lub jeśli nie masz pewności, czy metoda zmodyfikuje tablicę, nie wyodrębniaj tablicy do pola static readonly. 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 modyfikowana 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:
- To wywołanie jest wykonywane tylko raz.
- Tablica może być zmodyfikowana w wywoływanej metodzie lub nie możesz być pewien, czy zostanie ona zmodyfikowana.
- Nie obawiasz się o wpływ na wydajność z powodu tworzenia stałej tablicy przy każdym wywołaniu.
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.