Udostępnij za pośrednictwem


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 łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Literał string lub stała, która odpowiada nazwie parametru w metodzie, do której należy, lub nazwie właściwości typu, do którego należy, jest używana jako argument dla 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 typu string metody lub konstruktora, który jest wywoływany (to znaczy, że nie ma konwersji w miejscu wywołania).

  • Albo:

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

    • Zadeklarowana nazwa parametru to propertyName, a stała wartość literału string jest zgodna z nazwą właściwości typu, w ramach której wywołuje się 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 nameof symbol zostanie zmieniony, gdy nazwa parametru zostanie zmieniona w wyniku 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.");
}

Wskazówka

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 Ctrl+. (kropka). Wybierz Użyj nameof do wyrażania nazw symboli z listy wyświetlonych opcji.

Poprawka kodu dla CA1507 — używanie nazwy nameof do wyrażania nazw symboli

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ż