CA2241:必須提供格式化方法的正確引數
型別名稱 |
ProvideCorrectArgumentsToFormattingMethods |
CheckId |
CA2241 |
分類 |
Microsoft.Usage |
中斷變更 |
不中斷 |
原因
傳遞至方法的 format 字串引數,例如 WriteLine、Write 或 String.Format,不包含對應至每個物件引數的格式項目,反之亦然。
規則描述
一些方法 (例如 WriteLine、Write 和 Format) 的引數是由後接幾個 System.Object 執行個體的格式字串所組成。 格式字串是由文字和內嵌的項目格式所組成,形式為 {index[,alignment][:formatString]}。' 'index' 是以零起始的整數,會指出需要格式化的物件。 如果物件在格式字串中沒有對應的索引,將會忽略物件。 如果由 'index' 指定的物件不存在,會在執行階段擲回 System.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));
}
}
}