The format
string argument passed to a method such as WriteLine, Write, or System.String.Format does not contain a format item that corresponds to each object argument, or vice versa.
By default, this rule only analyzes calls to the three methods mentioned previously, but this is configurable.
Rule descriptionThe arguments to methods such as WriteLine, Write, and Format consist of a format string followed by several System.Object instances. The format string consists of text and embedded format items of the form {index[,alignment][:formatString]}
. 'index' is a zero-based integer that indicates which of the objects to format. If an object does not have a corresponding index in the format string, the object is ignored. If the object specified by 'index' does not exist, a System.FormatException is thrown at run time.
To fix a violation of this rule, provide a format item for each object argument and provide an object argument for each format item.
When to suppress warningsDo not suppress a warning from this rule.
Configure code to analyzeUse the following options to configure additional methods to run this rule on.
Additional string formatting methodsYou can configure names of additional string formatting methods which should be analyzed by this rule. For example, to specify all methods named MyFormat
as string formatting methods, you can add the following key-value pair to an .editorconfig file in your project:
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
Allowed method name formats in the option value (separated by |
):
M:
prefix.Examples:
Option Value Summarydotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
Matches all methods named MyFormat
in the compilation. dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2
Matches all methods named either MyFormat1
or MyFormat2
in the compilation. dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType)
Matches specific method MyFormat
with given fully qualified signature. dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType)
Matches specific methods MyFormat1
and MyFormat2
with respective fully qualified signature. Determine additional string formatting methods automatically
Instead of specifying an explicit list of additional string formatting methods, you can configure the analyzer to automatically attempt to determine the string formatting method. By default, this option is disabled. If the option is enabled, any method that has a string format
parameter followed by a params object[]
parameter is considered a string formatting method:
dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true
Example
The following example shows two violations of the rule.
Imports System
Namespace ca2241
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
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));
}
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4