Share via


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