다음을 통해 공유


CA2241: 형식 메서드에 올바른 인수를 제공하십시오.

TypeName

ProvideCorrectArgumentsToFormattingMethods

CheckId

CA2241

범주

Microsoft.Usage

변경 수준

주요 변경 아님

원인

WriteLine, Write 또는 String.Format 같은 메서드에 전달되는 format 문자열 인수에 각 개체 인수에 해당하는 형식 항목이 없거나 각 형식 항목에 해당하는 개체 인수가 없습니다.

규칙 설명

WriteLine, WriteFormat 같은 메서드에 대한 인수는 서식 문자열과 여러 개의 System.Object 인스턴스로 구성됩니다.서식 문자열은 텍스트와 {index[,alignment][:formatString]} 형태의 포함된 서식 지정 항목으로 구성됩니다. 'index'는 서식을 지정할 개체를 나타내는 정수(0부터 시작)입니다.개체에 서식 문자열의 해당 인덱스가 없으면 해당 개체는 무시됩니다.'index'로 지정된 개체가 없으면 런타임에 System.FormatException이 throw됩니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 각 개체 인수에 서식 지정 항목을 지정하고 각 서식 지정 항목에 개체 인수를 지정합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

예제

다음 예제에서는 이 규칙을 위반하는 두 가지 경우를 보여 줍니다.

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