CA1507: Użyj nameof zamiast ciągu

Właściwości Wartość
Identyfikator reguły CA1507
Tytuł Używanie nameof zamiast ciągu
Kategoria Łatwość konserwacji
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Literał string lub stała zgodna z nazwą parametru metody zawierającej lub nazwą właściwości typu zawierającego jest używana jako argument metody.

Opis reguły

Reguła CA1507 flaguje użycie string literału jako argumentu do metody lub konstruktora, w którym wyrażenie nameof (NameOf w Visual Basic) zwiększa łatwość konserwacji. Reguła jest uruchamiana, jeśli spełnione są wszystkie następujące warunki:

  • Argument jest literałem lub stałą string .

  • Argument odpowiada parametrowi string-typed metody lub wywoływanego konstruktora (czyli nie ma konwersji w lokacji wywołania).

  • Dowolny z następujących elementów:

    • Zadeklarowana nazwa parametru to paramName i stała wartość string literału odpowiada nazwie parametru metody, lambda lub funkcji lokalnej, w której wywoływana jest metoda lub konstruktor.

    • Zadeklarowana nazwa parametru to propertyName i stała wartość string literału jest zgodna z nazwą właściwości typu, w której wywoływana jest metoda lub konstruktor.

Reguła CA1507 poprawia konserwację kodu w przypadkach, gdy parametr może być zmieniany w przyszłości, ale string literał nie jest błędnie zmieniany. Za pomocą elementu nameofsymbol zostanie zmieniony, gdy nazwa parametru zostanie zmieniona za pomocą operacji refaktoryzacji. Ponadto wszelkie błędy pisowni w nazwie parametru są przechwytywane przez kompilator.

Jak naprawić naruszenia

Aby naprawić naruszenie, zastąp string literał wyrażeniem nameof (NameOf w Visual Basic). Na przykład następujące dwa fragmenty kodu pokazują naruszenie reguły i sposób jego naprawy:

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.");
}

Napiwek

Poprawka kodu jest dostępna dla tej reguły w programie Visual Studio. Aby go użyć, umieść kursor na string literału i naciśnij klawisze Ctrl+. (kropka). Wybierz pozycję Użyj elementu nameof, aby wyrazić nazwy symboli z wyświetlonej listy opcji.

Code fix for CA1507 - use nameof to express symbol names

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć naruszenie tej reguły, jeśli nie martwisz się o konserwację kodu.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1507.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też