Delen via


CA2241: Geef de juiste argumenten op voor het opmaken van methoden

Eigenschappen Weergegeven als
Regel-id CA2241
Titel Juiste argumenten opgeven voor het opmaken van methoden
Categorie Gebruik
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Als suggestie

Oorzaak

Het format tekenreeksargument dat wordt doorgegeven aan een methode, zoals WriteLine, Writeof System.String.Format bevat geen opmaakitem dat overeenkomt met elk objectargument of omgekeerd.

Deze regel analyseert standaard alleen aanroepen naar de drie eerder genoemde methoden, maar dit is configureerbaar.

Beschrijving van regel

De argumenten voor methoden zoals WriteLine, Writeen Format bestaan uit een notatietekenreeks, gevolgd door verschillende System.Object exemplaren. De notatietekenreeks bestaat uit tekst en ingesloten opmaakitems van het formulier {index[,alignment][:formatString]}. 'index' is een geheel getal op basis van nul dat aangeeft welke objecten moeten worden opgemaakt. Als een object geen bijbehorende index in de notatietekenreeks heeft, wordt het object genegeerd. Als het object dat is opgegeven door 'index' niet bestaat, wordt er een System.FormatException gegenereerd tijdens runtime.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, geeft u een opmaakitem op voor elk objectargument en geeft u een objectargument op voor elk opmaakitem.

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.

Code configureren om te analyseren

Gebruik de volgende opties om aanvullende methoden te configureren voor het uitvoeren van deze regel.

Aanvullende tekenreeksopmaakmethoden

U kunt namen van aanvullende tekenreeksopmaakmethoden configureren die door deze regel moeten worden geanalyseerd. Als u bijvoorbeeld alle methoden met de naam MyFormat tekenreeksopmaakmethoden wilt opgeven, kunt u het volgende sleutel-waardepaar toevoegen aan een .editorconfig-bestand in uw project:

dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat

Indelingen van toegestane methodenamen in de optiewaarde (gescheiden door |):

  • Alleen methodenaam (inclusief alle methoden met de naam, ongeacht het type of de naamruimte)
  • Volledig gekwalificeerde namen in de documentatie-id-indeling van het symbool, met een optioneel M: voorvoegsel.

Voorbeelden:

Optiewaarde Samenvatting
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat Komt overeen met alle methoden die in de compilatie worden genoemd MyFormat .
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 Komt overeen met alle methoden met de naam of MyFormat1 MyFormat2 in de compilatie.
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) Komt overeen met een specifieke methode MyFormat met een volledig gekwalificeerde handtekening.
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) Komt overeen met specifieke methoden MyFormat1 en MyFormat2 met de respectieve volledig gekwalificeerde handtekening.

Aanvullende tekenreeksopmaakmethoden automatisch bepalen

In plaats van een expliciete lijst met aanvullende tekenreeksopmaakmethoden op te geven, kunt u de analyse zo configureren dat automatisch wordt geprobeerd de opmaakmethode voor tekenreeksen te bepalen. Deze optie is standaard uitgeschakeld. Als de optie is ingeschakeld, wordt een methode met een string format parameter gevolgd door een params object[] parameter beschouwd als een tekenreeksopmaakmethode:

dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true

Opmerking

In het volgende voorbeeld ziet u twee schendingen van de regel.

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