Бөлісу құралы:


CA1507: используйте nameof вместо string

Свойство Значение
Идентификатор правила CA1507
Заголовок Использование nameof вместо строки
Категория Ремонтопригодность
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 Как предложение
Применимые языки C# и Visual Basic

Причина

Литерал string или константа, которые соответствуют имени параметра содержащего метода или имени свойства содержащего типа, используются в качестве аргумента метода.

Описание правила

Правило CA1507 помечает использование литерала string в качестве аргумента для метода или конструктора, где использование выражения nameof (NameOf в Visual Basic) повысило бы поддерживаемость кода. Правило срабатывает, если выполняются все перечисленные ниже условия:

  • Аргумент string — литерал или константа.

  • Аргумент соответствует stringтипизированному параметру вызываемого метода или конструктора, (то есть на месте вызова не используется преобразование).

  • Любое из следующих:

    • Объявленное имя параметра — paramName, а постоянное значение литерала string соответствует имени параметра метода, лямбда-выражения или локальной функции, в которой вызывается метод или конструктор.

    • Объявленное имя параметра — propertyName, а постоянное значение литерала string соответствует имени свойства типа, в котором вызывается метод или конструктор.

Правило CA1507 повышает удобство поддержки кода в случаях, когда параметр может быть переименован в будущем, но литерал string ошибочно не переименован. При использовании nameof символ будет переименован при переименовании параметра с помощью операции рефакторинга. Кроме того, все орфографические ошибки в имени параметра улавливаются компилятором.

Устранение нарушений

Чтобы устранить нарушение, замените литерал string выражением nameof (NameOf in Visual Basic). В следующих двух фрагментах кода показано нарушение правила и способы его устранения:

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

Совет

Для этого правила в Visual Studio доступно исправление кода. Чтобы использовать его, поместите курсор на string литерал и нажмите Ctrl+ (период). Выберите Use nameof to express symbol names (Использовать nameof для выражения имен символов) из списка отображаемых параметров.

Исправление кода для CA1507 — используйте nameof для выражения имен символов

Когда лучше отключить предупреждения

Нарушение этого правила можно безопасно скрыть, если вы не беспокоитесь о поддерживаемости вашего кода.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

См. также