CA1305: Ange IFormatProvider

Egenskap Värde
Regel-ID CA1305
Title Ange IFormatProvider
Kategori Globalisering
Korrigeringen är antingen brytande eller icke-brytande Icke-brytande
Aktiverad som standard i .NET 10 Nej
Tillämpliga språk C# och Visual Basic

Orsak

Ett anrop görs till en metod som har en överlagring som accepterar ett System.IFormatProvider argument, och den överlagringen anropas inte.

Den här regeln ignorerar anrop till .NET-metoder som dokumenteras som ignorerar parametern IFormatProvider . Regeln ignorerar också följande metoder:

Regelbeskrivning

När ett System.Globalization.CultureInfo eller IFormatProvider -objekt inte har angetts kanske standardvärdet som tillhandahålls av den överbelastade medlemmen inte får den effekt som du vill ha på alla nationella inställningar. .NET-medlemmar väljer också standardkultur och formatering baserat på antaganden som kanske inte stämmer för din kod. För att se till att koden fungerar som förväntat för dina scenarier bör du ange kulturspecifik information enligt följande riktlinjer:

  • Om värdet ska visas för användaren, använd den aktuella kulturen. Se CultureInfo.CurrentCulture.

  • Om värdet ska lagras och nås av programvara (sparas i en fil eller databas) använder du den invarianta kulturen. Se CultureInfo.InvariantCulture.

  • Om du inte känner till värdets mål måste datakonsumenten eller providern ange kulturen.

Även om standardbeteendet för den överbelastade medlemmen är lämpligt för dina behov är det bättre att uttryckligen anropa den kulturspecifika överlagringen så att koden självdokumenteras och blir enklare att underhålla.

Så här åtgärdar du överträdelser

Om du vill åtgärda en överträdelse av den här regeln använder du den överbelastning som tar ett IFormatProvider argument. För att använda den invarianta kulturen, använd en C#-interpolerad sträng och skicka den tillsammans med String.Create(IFormatProvider, DefaultInterpolatedStringHandler) till CultureInfo.InvariantCulture, till exempel:

string.Create(CultureInfo.InvariantCulture, $"{major}.{minor}.{build}.{revision}");

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln när det är säkert att standardformatet är rätt val och där kodunderhållbarhet inte är en viktig utvecklingsprioritet.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1305
// The code that's violating the rule is on this line.
#pragma warning restore CA1305

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1305.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Konfigurera kod för analys

Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.

Du kan konfigurera dessa alternativ för just den här regeln, för alla regler som de gäller för eller för alla regler i den här kategorin (Globalisering) som de gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.

Exkludera specifika symboler

Du kan exkludera specifika symboler, till exempel typer och metoder, från analys genom att ange alternativet excluded_symbol_names. Om du till exempel vill ange att regeln inte ska köras på någon kod inom typer med namnet MyTypelägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:

dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType

Notera

Ersätt den XXXX delen av CAXXXX med ID:t för den tillämpliga regeln.

Tillåtna symbolnamnformat i alternativvärdet (avgränsade med |):

  • Endast symbolnamn (innehåller alla symboler med det namnet, oavsett vilken typ eller namnrymd de finns i).
  • Fullständigt kvalificerade namn i symbolens dokumentations-ID-format. Varje symbolnamn kräver ett symboltypprefix, till exempel M: för metoder, T: för typer och N: för namnområden.
  • .ctor för konstruktorer och .cctor för statiska konstruktorer.

Exempel:

Alternativvärde Sammanfattning
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType Matchar alla symboler med namnet MyType.
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 Matchar alla symboler med namnet antingen MyType1 eller MyType2.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) Matchar en specifik metod MyMethod med den angivna fullständigt kvalificerade signaturen.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) Matchar specifika metoder MyMethod1 och MyMethod2 med respektive fullständigt kvalificerade signaturer.

Exkludera specifika typer och deras härledda typer

Du kan exkludera specifika typer och deras härledda typer från analys genom att ange alternativet excluded_type_names_with_derived_types. Om du till exempel vill ange att regeln inte ska köras på några metoder inom typer som heter MyType och deras härledda typer lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:

dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType

Notera

Ersätt den XXXX delen av CAXXXX med ID:t för den tillämpliga regeln.

Tillåtna symbolnamnformat i alternativvärdet (avgränsade med |):

  • Ange endast namn (innehåller alla typer med namnet, oavsett vilken typ eller namnrymd som innehåller det).
  • Fullständigt kvalificerade namn i symbolens dokumentations-ID-format, med ett valfritt T: prefix.

Exempel:

Alternativvärde Sammanfattning
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType Matchar alla typer med namnet MyType och alla deras härledda typer.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 Matchar alla typer med namnet antingen MyType1 eller MyType2 och alla deras härledda typer.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType Matchar en specifik typ MyType med ett angivet fullständigt kvalificerat namn och alla dess härledda typer.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 Matchar specifika typer MyType1 och MyType2 med respektive fullständigt kvalificerade namn och alla deras härledda typer.

Exempel

I följande kod bryter strängen example1 mot regeln CA1305. Strängen example2 uppfyller regeln CA1305 genom att skicka CultureInfo.CurrentCulture, som implementerar IFormatProvider, till String.Format(IFormatProvider, String, Object). Strängen example3 uppfyller regeln CA1305 genom att skicka en interpolerad sträng till String.Create(IFormatProvider, DefaultInterpolatedStringHandler) tillsammans med CultureInfo.InvariantCulture.

string name = "Georgette";

// Violates CA1305
string example1 = string.Format("Hello {0}", name);

// Satisfies CA1305
string example2 = string.Format(CultureInfo.CurrentCulture, "Hello {0}", name);

// Satisfies CA1305
string example3 = string.Create(CultureInfo.InvariantCulture, $"Hello {name}");

Se även