CA1305: Az IFormatProvider megadása
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1305 |
Cím | IFormatProvider megadása |
Kategória | Globalizáció |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 9-ben | Nem |
Ok
A hívás olyan metódusra történik, amely túlterheléssel rendelkezik, amely argumentumot System.IFormatProvider fogad el, és a túlterhelés nem lesz meghívva.
Ez a szabály figyelmen kívül hagyja a .NET-metódusokra irányuló hívásokat, amelyek a paraméter figyelmen kívül hagyásaként vannak dokumentálva IFormatProvider . A szabály a következő metódusokat is figyelmen kívül hagyja:
- Activator.CreateInstance
- ResourceManager.GetObject
- ResourceManager.GetString
- Boolean.ToString
- Char.ToString
- Guid.ToString
Szabály leírása
Ha egy System.Globalization.CultureInfo vagy IFormatProvider több objektum nincs megadva, előfordulhat, hogy a túlterhelt tag által megadott alapértelmezett érték nem minden területi beállításban a kívánt hatással van. A .NET-tagok emellett olyan feltételezések alapján választják ki az alapértelmezett kultúrát és formázást, amelyek nem feltétlenül helyesek a kódhoz. Annak érdekében, hogy a kód a forgatókönyvek szerint működjön, az alábbi irányelveknek megfelelően kell megadnia a kultúraspecifikus információkat:
Ha az érték megjelenik a felhasználó számára, használja az aktuális kultúrát. Lásd: CultureInfo.CurrentCulture.
Ha az értéket szoftver tárolja és éri el (fájl vagy adatbázis őrzi meg), használja az invariáns kultúrát. Lásd: CultureInfo.InvariantCulture.
Ha nem tudja az érték célját, az adatfelhasználó vagy a szolgáltató adja meg a kultúrát.
Még akkor is, ha a túlterhelt tag alapértelmezett viselkedése megfelel az Igényeinek, jobb, ha explicit módon meghívja a kultúraspecifikus túlterhelést, hogy a kód önaláírást és könnyebben karbantartható legyen.
Szabálysértések kijavítása
A szabály megsértésének kijavításához használja az argumentumot igénylő túlterhelést IFormatProvider . Vagy az invariáns kultúra használatához használjon egy C# interpolált sztringet , és adja át a String.Create(IFormatProvider, DefaultInterpolatedStringHandler) következővel CultureInfo.InvariantCultureegyütt, például:
string.Create(CultureInfo.InvariantCulture, $"{major}.{minor}.{build}.{revision}");
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetését nyugodtan mellőzheti, ha biztos abban, hogy az alapértelmezett formátum a megfelelő választás, és ahol a kód karbantarthatósága nem fontos fejlesztési prioritás.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1305
// The code that's violating the rule is on this line.
#pragma warning restore CA1305
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1305.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Globalization), amelyekre vonatkoznak. További információ: Kódminőségi szabály konfigurációs beállításai.
Adott szimbólumok kizárása
A excluded_symbol_names beállítással kizárhat bizonyos szimbólumokat, például típusokat és metódusokat az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType
típusok egyikén sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Jegyzet
Cserélje le a XXXX
CAXXXX
részét a vonatkozó szabály azonosítójára.
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |
elválasztva):
- Csak szimbólumnév (a névvel ellátott összes szimbólumot tartalmazza, függetlenül attól, hogy milyen típusú vagy névtérrel rendelkezik).
- A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek. Minden szimbólumnévhez szimbólum típusú előtag szükséges, például
M:
metódusokhoz,T:
típusokhoz ésN:
névterekhez. -
.ctor
konstruktorok és.cctor
statikus konstruktorok számára.
Példák:
Beállítás értéke | Összegzés |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Megegyezik az összes elnevezett MyType szimbólummal. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Megegyezik az összes elnevezett MyType1 szimbólummal vagy MyType2 . |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Megfelel a megadott metódusnak MyMethod a megadott teljes jogosultsággal rendelkező aláírással. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Egyezik az adott metódusokkal MyMethod1 és MyMethod2 a megfelelő, teljes mértékben minősített aláírásokkal. |
Adott típusok és származtatott típusok kizárása
A excluded_type_names_with_derived_types beállítás beállításával kizárhat bizonyos típusokat és azok származtatott típusait az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType
és származtatott típusok egyik metódusán sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Jegyzet
Cserélje le a XXXX
CAXXXX
részét a vonatkozó szabály azonosítójára.
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |
elválasztva):
- Csak típusnév (a névvel rendelkező összes típust 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
T:
előtaggal.
Példák:
Beállítás értéke | Összegzés |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Megfelel az összes névvel ellátott MyType típusnak és az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Megfelel az összes névvel ellátott MyType1 típusnak, vagy MyType2 az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Egyezik MyType a megadott teljes névvel és az összes származtatott típusával. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Egyezik az adott típusokkal MyType1 és MyType2 a megfelelő teljes névvel, valamint az összes származtatott típussal. |
Példa
A következő kódban a sztring megsérti a example1
CA1305 szabályt. A example2
sztring megfelel a CA1305 szabálynak azáltal, hogy átadja CultureInfo.CurrentCulturea (implementáló IFormatProvider) szabályt a következőnek String.Format(IFormatProvider, String, Object): . A example3
sztring megfelel a CA1305 szabálynak úgy, hogy String.Create(IFormatProvider, DefaultInterpolatedStringHandler) egy interpolált sztringet ad át a következővel CultureInfo.InvariantCultureegyütt: .
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}");