Поделиться через


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