Condividi tramite


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