CA2241: Fornire argomenti corretti ai metodi di formattazione
TypeName |
ProvideCorrectArgumentsToFormattingMethods |
CheckId |
CA2241 |
Category |
Microsoft.Usage |
Breaking Change |
Non sostanziale |
Causa
L'argomento stringa format passato a un metodo quale come WriteLine, Write, o String.Format non contiene un elemento di formato che corrispondente ad ogni argomento dell'oggetto o viceversa.
Descrizione della regola
Gli argomenti per metodi quali WriteLine, Write e Format sono costituiti da una stringa di formato seguita da diverse istanze di System.Object.La stringa di formato è costituita da testo e da elementi di formato incorporati nella forma {index[,alignment][:formatString]}. '"index" è un Integer in base zero che indica quali oggetti sono da formattare.Se un oggetto non presenta un indice corrispondente nella stringa di formato, tale oggetto viene ignorato.Se l'oggetto specificato da "index" non esiste, in fase di esecuzione verrà generata un'eccezione System.FormatException.
Come correggere le violazioni
Per correggere una violazione di questa regola, fornire un elemento di formato per ogni argomento di oggetto e un argomento di oggetto per ogni elemento di formato.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito vengono illustrate due violazioni di questa regola.
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));
}
}
}