CA2241: предоставьте правильные аргументы методам форматирования
TypeName |
ProvideCorrectArgumentsToFormattingMethods |
CheckId |
CA2241 |
Категория |
Microsoft.Usage |
Критическое изменение |
Не критическое |
Причина
Строковый аргумент format, передаваемый такому методу, как WriteLine, Write и String.Format, не содержит элемента форматирования, соответствующего каждому аргументу объекта, или наоборот.
Описание правила
Аргументы методов, таких как WriteLine, Write и Format, состоят из строки формата и нескольких экземпляров Object.Строка формата состоит из текста и внедренных элементов форматирования формы {index[,alignment][:formatString]}. 'index' — это отсчитываемое от нуля целое число, которое указывает форматируемый объект.Если объект не имеет соответствующего индекса в строке формата, этот объект игнорируется.Если объект, заданный 'index', не существует, во время выполнения создается исключение FormatException.
Устранение нарушений
Чтобы исправить нарушение этого правила, необходимо предоставить элемент форматирования для каждого аргумента объекта и аргумент объекта для каждого элемента форматирования.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере показаны два нарушения данного правила.
Imports System
Namespace UsageLibrary
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
using System;
namespace UsageLibrary
{
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));
}
}
}