Исправление является критическим или не критическим
Не критическое
Включен по умолчанию в .NET 9
Как предложение
Причина
Строковый format аргумент, переданный методу, например WriteLine, Writeили System.String.Format не содержит элемент формата, соответствующий каждому аргументу объекта или наоборот.
По умолчанию это правило анализирует только вызовы к трем упомянутым выше методам, но это можно настроить.
Описание правила
Аргументы для таких методов, как WriteLine, Write и Format, состоят из строки форматирования, за которой следует несколько экземпляров System.Object. Строка формата состоит из текстовых и внедренных элементов формата формы {index[,alignment][:formatString]}. 'index' — это отсчитываемое от нуля целое число, которое указывает форматируемый объект. Если у объекта нет соответствующего индекса в строке формата, объект игнорируется. Если объект, указанный параметром "index", не существует, во время выполнения создается исключение System.FormatException.
Устранение нарушений
Чтобы устранить нарушение этого правила, укажите элемент форматирования для каждого аргумента объекта и предоставьте аргумент объекта для каждого элемента форматирования.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Настройка кода для анализа
Используйте следующие параметры, чтобы настроить дополнительные методы для выполнения этого правила.
Вы можете настроить имена дополнительных методов форматирования строк, которые должны анализироваться этим правилом. Например, чтобы указать все методы с именами MyFormat как методы форматирования строк, можно добавить следующую пару "ключ-значение" в файл .editorconfig в проекте:
Соответствует определенным методам MyFormat1 и MyFormat2 с соответствующей полной подписью.
Автоматическое определение дополнительных методов форматирования строк
Вместо явного указания списка дополнительных методов форматирования строк анализатор можно настроить на автоматическую попытку определить метод форматирования строк. По умолчанию этот параметр отключен. Если этот параметр включен, то любой метод с параметром string format, за которым следует параметр params object[], считается методом форматирования строк:
В следующем примере показаны два нарушения правила.
Imports System
Namespace ca2241
Class CallsStringFormat
Sub CallFormat()
Dim file As String = "file name"
Dim errors As Integer = 13
' Violates the rule.
Console.WriteLine(String.Format("{0}", file, errors))
Console.WriteLine(String.Format("{0}: {1}", file, errors))
' Violates the rule and generates a FormatException at runtime.
Console.WriteLine(String.Format("{0}: {1}, {2}", file, errors))
End Sub
End Class
End Namespace
C#
classCallsStringFormat
{
voidCallFormat()
{
string file = "file name";
int errors = 13;
// Violates the rule.
Console.WriteLine(string.Format("{0}", file, errors));
Console.WriteLine(string.Format("{0}: {1}", file, errors));
// Violates the rule and generates a FormatException at runtime.
Console.WriteLine(string.Format("{0}: {1}, {2}", file, errors));
}
}
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.