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, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Pole literálových hodnot se předává metodě prostřednictvím pravidelného volání nebo volání rozšiřující funkce.

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í změněné v rámci volané metody, zvažte jeho extrahování do static readonly pole za účelem zlepšení výkonu.

Poznámka:

Pokud volaná metoda změní předané pole nebo pokud si nejste jistí, jestli metoda změní pole, pole neextrahujte 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 konstantní pole do static readonly polí, pokud předané pole není modifikováno v rámci metody, která je volána.

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í se hodnota pole vyhodnocuje v době kompilace místo za běhu, což činí kód efektivnější.

Kdy potlačit upozornění

Potlačit porušení tohoto pravidla, pokud:

  • Vyvolání se spustí jenom jednou.
  • Pole může být změněno v rámci vyvolané metody, nebo si nejste jistí, jestli by se změnilo.
  • 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.