CA2241: 형식 메서드에 올바른 인수를 제공하십시오.
TypeName |
ProvideCorrectArgumentsToFormattingMethods |
CheckId |
CA2241 |
범주 |
Microsoft.Usage |
변경 수준 |
주요 변경 아님 |
원인
WriteLine, Write 또는 String.Format 같은 메서드에 전달되는 format 문자열 인수에 각 개체 인수에 해당하는 형식 항목이 없거나 각 형식 항목에 해당하는 개체 인수가 없습니다.
규칙 설명
WriteLine, Write 및 Format 같은 메서드에 대한 인수는 서식 문자열과 여러 개의 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));
}
}
}