Megosztás a következőn keresztül:


CA2241: Helyes argumentumok megadása a formázási módszerekhez

Tulajdonság Érték
Szabályazonosító CA2241
Cím A formázási módszerek megfelelő argumentumainak megadása
Kategória Használat
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A format metódusnak átadott sztringargumentum, például WriteLineaz , Writevagy System.String.Format nem tartalmaz olyan formátumelemet, amely megfelel az egyes objektumargumentumoknak, vagy fordítva.

Ez a szabály alapértelmezés szerint csak a korábban említett három metódus hívásait elemzi, de ez konfigurálható.

Szabály leírása

Az olyan metódusok argumentumai, mint a WriteLine, Writeés Format egy formátumsztringből állnak, amelyet több System.Object példány követ. A formátumsztring az űrlap {index[,alignment][:formatString]}szöveges és beágyazott formázási elemeiből áll. Az "index" egy nulla alapú egész szám, amely azt jelzi, hogy melyik objektumot kell formázni. Ha egy objektumnak nincs megfelelő indexe a formátumsztringben, a rendszer figyelmen kívül hagyja az objektumot. Ha az "index" által megadott objektum nem létezik, a rendszer futtatáskor ad ki egy System.FormatException objektumot.

Szabálysértések kijavítása

A szabály megsértésének kijavításához adjon meg egy formázási elemet minden egyes objektumargumentumhoz, és adjon meg egy objektumargumentumot az egyes formázási elemekhez.

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa el a szabály figyelmeztetését.

Kód konfigurálása elemzéshez

A következő beállítások segítségével további metódusokat konfigurálhat a szabály futtatásához.

További sztringformázási módszerek

Konfigurálhat további sztringformázási módszereket, amelyeket a szabálynak elemeznie kell. Ha például sztringformázási metódusként elnevezett MyFormat összes metódust meg szeretne adni, az alábbi kulcs-érték párokat hozzáadhatja a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat

Engedélyezett metódusnévformátumok a beállításértékben (a következővel |elválasztva):

  • Csak a metódus neve (a névvel rendelkező összes metódust tartalmazza, függetlenül attól, hogy milyen típust vagy névteret tartalmaz)
  • A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek opcionális M: előtaggal.

Példák:

Beállítás értéke Összegzés
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat Megfelel a fordításban elnevezett MyFormat összes metódusnak.
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 Megfelel a fordításban vagy MyFormat2 a MyFormat1 fordításban szereplő összes metódusnak.
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) Megfelel a megadott metódusnak MyFormat a megadott teljes aláírással.
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) Egyezik a megadott metódusokkal MyFormat1 és MyFormat2 a megfelelő teljes aláírással.

További sztringformázási módszerek automatikus meghatározása

Ahelyett, hogy további sztringformázási módszerek explicit listáját adja meg, konfigurálhatja az elemzőt, hogy automatikusan megkísérlje meghatározni a sztringformázási módszert. Alapértelmezés szerint ez a beállítás le van tiltva. Ha a beállítás engedélyezve van, a paraméterrel és paraméterrel params object[] rendelkező string format metódusok sztringformázási módszernek minősülnek:

dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true

Példa

Az alábbi példa a szabály két szabálysértést mutat be.

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