CA2241: Fornire argomenti corretti ai metodi di formattazione
Proprietà | valore |
---|---|
ID regola | CA2241 |
Title | Specificare argomenti corretti ai metodi di formattazione |
Categoria | Utilizzo |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come suggerimento |
Causa
L'argomento format
stringa passato a un metodo, ad WriteLineesempio , Writeo System.String.Format non contiene un elemento di formato corrispondente a ogni argomento oggetto o viceversa.
Per impostazione predefinita, questa regola analizza solo le chiamate ai tre metodi indicati in precedenza, ma è configurabile.
Descrizione regola
Gli argomenti di metodi come WriteLine, Writee Format sono costituiti da una stringa di formato seguita da diverse System.Object istanze. La stringa di formato è costituita da elementi di formato di testo e incorporati del modulo {index[,alignment][:formatString]}
. 'index' è un intero in base zero che indica quali oggetti sono da formattare. Se un oggetto non dispone di un indice corrispondente nella stringa di formato, l'oggetto viene ignorato. Se l'oggetto specificato da 'index' non esiste, viene generata un'eccezione System.FormatException in fase di esecuzione.
Come correggere le violazioni
Per correggere una violazione di questa regola, specificare un elemento di formato per ogni argomento oggetto e fornire un argomento oggetto per ogni elemento di formato.
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.
Configurare il codice da analizzare
Usare le opzioni seguenti per configurare metodi aggiuntivi per eseguire questa regola.
- Metodi di formattazione di stringhe aggiuntivi
- Determinare automaticamente metodi di formattazione di stringhe aggiuntivi
Metodi di formattazione di stringhe aggiuntivi
È possibile configurare i nomi di metodi di formattazione delle stringhe aggiuntivi che devono essere analizzati da questa regola. Ad esempio, per specificare tutti i metodi denominati MyFormat
come metodi di formattazione delle stringhe, è possibile aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto:
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
I formati dei nomi dei metodi consentiti nel valore dell'opzione (separati da |
):
- Solo nome metodo (include tutti i metodi con il nome, indipendentemente dal tipo o dallo spazio dei nomi contenitore)
- Nomi completi nel formato ID della documentazione del simbolo, con un prefisso facoltativo
M:
.
Esempi:
Valore opzione | Riepilogo |
---|---|
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat |
Corrisponde a tutti i metodi denominati MyFormat nella compilazione. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 |
Corrisponde a tutti i metodi denominati MyFormat1 o MyFormat2 nella compilazione. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) |
Corrisponde a un metodo MyFormat specifico con una firma completa specificata. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) |
Trova la corrispondenza con metodi MyFormat1 specifici e MyFormat2 con la rispettiva firma completa. |
Determinare automaticamente metodi di formattazione di stringhe aggiuntivi
Anziché specificare un elenco esplicito di metodi di formattazione delle stringhe aggiuntivi, è possibile configurare l'analizzatore per tentare automaticamente di determinare il metodo di formattazione delle stringhe. L'opzione è disabilitata per impostazione predefinita. Se l'opzione è abilitata, qualsiasi metodo con un string format
parametro seguito da un params object[]
parametro viene considerato un metodo di formattazione di stringa:
dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true
Esempio
Nell'esempio seguente vengono illustrate due violazioni della regola.
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));
}
}