CA2241: Poskytněte správné argumenty metodě formátování
TypeName |
ProvideCorrectArgumentsToFormattingMethods |
CheckId |
CA2241 |
Kategorie |
Microsoft.Usage |
Narušující změna |
Nenarušující |
Příčina
format Řetězcový argument předaný do metody jako WriteLine, Write, nebo String.Format neobsahuje položku formát, který odpovídá na každý objekt argument nebo naopak.
Popis pravidla
Argumenty metod jako WriteLine, Write, nebo Format obsahují řetězec formátu následovaný několika instancemi Object.Formátovací řetězec se skládá z textu a vložených formátovacích položek formuláře {index [, alignment] [: formatString]}. "index" je od nuly celé číslo, které určuje, které objekty, které chcete formátovat.Objekt je ignorován, pokud formátovací řetězec neobsahuje odpovídající index.Při běhu je vyvolána výjimka FormatException, pokud neexistuje objekt určený indexem.
Jak vyřešit porušení
Poskytnutím formátovací položky pro každý objektový argument a poskytnutím objektového argumentu pro každou formátovací položku dojde k vyřešení porušení tohoto pravidla.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje dvě porušení tohoto pravidla.
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));
}
}
}