CA2241: Poskytněte správné argumenty metodě formátování
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2241 |
Název | Zadejte správné argumenty pro metody formátování |
Kategorie | Využití |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 8 | Jako návrh |
Příčina
Řetězcový format
argument předaný metodě, například WriteLine, Writenebo System.String.Format neobsahuje položku formátu, která odpovídá každému argumentu objektu, nebo naopak.
Ve výchozím nastavení toto pravidlo analyzuje pouze volání tří dříve zmíněných metod, ale dá se nakonfigurovat.
Popis pravidla
Argumenty pro metody, jako WriteLineje , Writea Format skládají se z formátovací řetězec následovaný několika System.Object instancemi. Formátovací řetězec se skládá z textových a vložených formátových položek formuláře {index[,alignment][:formatString]}
. Index je celé číslo založené na nule, které označuje, které objekty se mají formátovat. Pokud objekt nemá odpovídající index ve formátovacím řetězci, bude objekt ignorován. Pokud objekt určený indexem neexistuje, System.FormatException vyvolá se za běhu.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, zadejte položku formátu pro každý argument objektu a zadejte argument objektu pro každou položku formátu.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Konfigurace kódu pro analýzu
Pomocí následujících možností můžete nakonfigurovat další metody pro spuštění tohoto pravidla.
Další metody formátování řetězců
Můžete nakonfigurovat názvy dalších metod formátování řetězců, které by měly být analyzovány tímto pravidlem. Pokud chcete například zadat všechny metody pojmenované MyFormat
jako metody formátování řetězců, můžete do souboru .editorconfig v projektu přidat následující pár klíč-hodnota:
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
Povolené formáty názvů metod v hodnotě možnosti (oddělené ):|
- Pouze název metody (zahrnuje všechny metody s názvem bez ohledu na typ nebo obor názvů)
- Plně kvalifikované názvy ve formátu ID dokumentace symbolu s volitelnou
M:
předponou.
Příklady:
Hodnota možnosti | Shrnutí |
---|---|
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat |
Odpovídá všem metodám pojmenovanými MyFormat v kompilaci. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 |
Porovná všechny metody pojmenované buď MyFormat1 nebo MyFormat2 v kompilaci. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) |
Odpovídá konkrétní metodě MyFormat s daným plně kvalifikovaným podpisem. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) |
Odpovídá konkrétním metodám MyFormat1 a MyFormat2 s příslušným plně kvalifikovaným podpisem. |
Automatické určení dalších metod formátování řetězců
Místo zadávání explicitního seznamu dalších metod formátování řetězců můžete nakonfigurovat analyzátor tak, aby se automaticky pokusil určit metodu formátování řetězce. Ve výchozím nastavení je tato možnost zakázaná. Pokud je tato možnost povolená, považuje se za metodu string format
formátování řetězce jakákoli metoda s parametrem, za kterou params object[]
následuje parametr:
dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true
Příklad
Následující příklad ukazuje dvě porušení pravidla.
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));
}
}