Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Свойство | Значение |
---|---|
Идентификатор правила | CA2241 |
Заголовок | Задайте правильные аргументы для методов форматирования |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Строковый format
аргумент, переданный методу, например WriteLine, Writeили System.String.Format не содержит элемент формата, соответствующий каждому аргументу объекта или наоборот.
По умолчанию это правило анализирует только вызовы к трем упомянутым выше методам, но это можно настроить.
Аргументы для таких методов, как WriteLine, Write и Format, состоят из строки форматирования, за которой следует несколько экземпляров System.Object. Строка формата состоит из текстовых и внедренных элементов формата формы {index[,alignment][:formatString]}
. 'index' — это отсчитываемое от нуля целое число, которое указывает форматируемый объект. Если у объекта нет соответствующего индекса в строке формата, объект игнорируется. Если объект, указанный параметром "index", не существует, во время выполнения создается исключение System.FormatException.
Чтобы устранить нарушение этого правила, укажите элемент форматирования для каждого аргумента объекта и предоставьте аргумент объекта для каждого элемента форматирования.
Для этого правила отключать вывод предупреждений не следует.
Используйте следующие параметры, чтобы настроить дополнительные методы для выполнения этого правила.
- Дополнительные методы форматирования строк
- Автоматическое определение дополнительных методов форматирования строк
Вы можете настроить имена дополнительных методов форматирования строк, которые должны анализироваться этим правилом. Например, чтобы указать все методы с именами MyFormat
как методы форматирования строк, можно добавить следующую пару "ключ-значение" в файл .editorconfig в проекте:
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
Допустимые форматы имени метода в значении параметра (разделенные |
):
- Только имя метода (включает все методы с этим именем, любого типа и в любом пространстве имен).
- полные имена в формате идентификатора документации для символа с необязательным префиксом
M:
.
Примеры:
Значение параметра | Итоги |
---|---|
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat |
Соответствует всем методам, именованным MyFormat в компиляции. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 |
Соответствует всем методам с именем или MyFormat1 MyFormat2 в компиляции. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) |
Соответствует конкретному методу MyFormat с заданной полной подписью. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) |
Соответствует определенным методам MyFormat1 и MyFormat2 с соответствующей полной подписью. |
Вместо явного указания списка дополнительных методов форматирования строк анализатор можно настроить на автоматическую попытку определить метод форматирования строк. По умолчанию этот параметр отключен. Если этот параметр включен, то любой метод с параметром string format
, за которым следует параметр params object[]
, считается методом форматирования строк:
dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true
В следующем примере показаны два нарушения правила.
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
class CallsStringFormat
{
void CallFormat()
{
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));
}
}
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: