CA1861: Vyhněte se konstantním polím jako argumentům
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1861 |
Název | Vyhněte se konstantním polím jako argumentům |
Kategorie | Výkon |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Konstantní pole hodnot literálů se předává metodě prostřednictvím pravidelného vyvolání nebo vyvolání rozšiřující metody.
Popis pravidla
Konstanty předané jako argumenty se při opakovaném zavolání znovu nepoužívají, což znamená, že se pokaždé vytvoří nová matice. Pokud předané pole není ztlumené v rámci volané metody, zvažte jeho extrahování do static readonly
pole za účelem zlepšení výkonu.
Poznámka:
Pokud volána metoda ztlumí předanou matici nebo pokud si nejste jistí, jestli metoda ztlumí pole, nezextrahujte pole do static readonly
pole. To by mohlo být zásadní změna. V tomto případě je lepší potlačit upozornění.
Jak opravit porušení
Extrahujte pole konstant do static readonly
polí, pokud předaná matice není ztlumená v rámci volané metody.
Následující příklad ukazuje porušení pravidla:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
Následující příklad ukazuje, jak je porušení tohoto pravidla opraveno extrahováním argumentu static readonly
do pole.
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
Nyní je hodnota pole vyřešena v době kompilace, nikoli v době běhu, takže kód bude výkonnější.
Kdy potlačit upozornění
Potlačit porušení tohoto pravidla, pokud:
- Vyvolání se spustí jenom jednou.
- Pole může být ztlumené v rámci vyvolané metody nebo si nejste jistí, jestli by se ztlumilo.
- Nemáte obavy o dopad na výkon při vytváření konstantního pole pro každé vyvolání.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.