CA1507: Použijte nameof místo řetězce

Vlastnost Hodnota
ID pravidla CA1507
Název Použijte nameof místo řetězce
Kategorie Udržovatelnost
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

Litrál string nebo konstanta, která odpovídá názvu parametru metody, která ho obsahuje, nebo názvu vlastnosti typu, který ji obsahuje, se používá jako argument metody.

Popis pravidla

Pravidlo CA1507 označuje použití literálu string jako argumentu v metodě nebo konstruktoru, kde by použití výrazu nameof (NameOf v jazyce Visual Basic) zlepšilo udržovatelnost. Pravidlo se aktivuje, pokud jsou splněny všechny následující podmínky:

  • Argument je string literál nebo konstanta.

  • Argument odpovídá parametru typu string metody nebo konstruktoru, který je používán (to znamená, že v místě volání není zahrnut žádný převod).

  • Buď:

    • Deklarovaný název parametru je paramName a konstantní hodnota string literálu odpovídá názvu parametru metody, lambda nebo místní funkce, ve které je volána metoda nebo konstruktor.

    • Deklarovaný název parametru je propertyName a konstanta literálu string odpovídá názvu vlastnosti typu, ve kterém je metoda nebo konstruktor vyvolán.

Pravidlo CA1507 zlepšuje udržovatelnost kódu v případech, kdy se parametr může v budoucnu přejmenovat, ale string literál se omylem nepřejmenuje. Pokud použijete nameof, symbol se přejmenuje při přejmenování parametru prostřednictvím operace refaktoringu. Kromě toho kompilátor zachytí všechny pravopisné chyby v názvu parametru.

Jak opravit porušení

Chcete-li opravit porušení, nahraďte literál string výrazem nameof (NameOf v jazyce Visual Basic). Například následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:

public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}

Tip

Oprava kódu je k dispozici pro toto pravidlo v sadě Visual Studio. Umístěte kurzor na literál string a stiskněte Ctrl+. (tečka). Zvolte Použít nameof k vyjádření názvů symbolů ze seznamu zobrazených možností.

Oprava kódu pro CA1507 – použití nameof k vyjádření názvů symbolů

Kdy potlačit upozornění

Pokud vás nezajímá udržovatelnost kódu, je bezpečné potlačit porušení tohoto pravidla.

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 CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507

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.CA1507.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také