共用方式為


CA2241:必須提供格式化方法的正確引數

型別名稱

ProvideCorrectArgumentsToFormattingMethods

CheckId

CA2241

分類

Microsoft.Usage

中斷變更

不中斷

原因

傳遞至方法的 format 字串引數,例如 WriteLineWriteString.Format,不包含對應至每個物件引數的格式項目,反之亦然。

規則描述

一些方法 (例如 WriteLineWriteFormat) 的引數是由後接幾個 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));
      }
   }
}