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


CA1304: CultureInfo megadása

Tulajdonság Érték
Szabályazonosító CA1304
Cím CultureInfo 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 8-ban Nem

Ok

Egy metódus vagy konstruktor olyan tagot hív meg, aki túlterheléssel rendelkezik, amely elfogad egy paramétert System.Globalization.CultureInfo , és a metódus vagy a konstruktor nem hívja meg a paramétert használó túlterhelést CultureInfo . Ez a szabály figyelmen kívül hagyja a következő metódusokra irányuló hívásokat:

További szimbólumokat is konfigurálhat , hogy a szabály kizárja azokat.

Szabály leírása

Ha egy CultureInfo vagy System.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, a következő 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, vagyis egy fájlban vagy adatbázisban marad 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ó határozza 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.

Feljegyzés

CultureInfo.CurrentUICulture A rendszer csak a honosított erőforrások lekérésére szolgál az System.Resources.ResourceManager osztály egy példányával.

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 CultureInfo .

Mikor kell letiltani a figyelmeztetéseket?

Ha biztos, hogy az alapértelmezett kultúra a megfelelő választás, és ahol a kód karbantartása nem fontos fejlesztési prioritás, nyugodtan el lehet tiltani a szabály figyelmeztetését.

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 CA1304
// The code that's violating the rule is on this line.
#pragma warning restore CA1304

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.CA1304.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 vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott szimbólumok kizárása

Bizonyos szimbólumokat, például típusokat és metódusokat kizárhat az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyTypetí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

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 és N: 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 MyTypeszimbó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

Bizonyos típusokat és azok származtatott típusait kizárhatja 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

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 szabálysértések elhárítására

Az alábbi példában BadMethod a szabály két szabálysértést okoz. GoodMethod az első szabálysértést úgy javítja ki, hogy String.Compareátadja az invariáns kultúrát a felhasználónak, és a második szabálysértést úgy javítja ki, hogy String.ToLower átadja az aktuális kultúrát, mert string3 az megjelenik a felhasználó számára.

public class CultureInfoTest
{
    public void BadMethod(String string1, String string2, String string3)
    {
        if (string.Compare(string1, string2, false) == 0)
        {
            Console.WriteLine(string3.ToLower());
        }
    }

    public void GoodMethod(String string1, String string2, String string3)
    {
        if (string.Compare(string1, string2, false,
                          CultureInfo.InvariantCulture) == 0)
        {
            Console.WriteLine(string3.ToLower(CultureInfo.CurrentCulture));
        }
    }
}

Példa formázott kimenetre

Az alábbi példa az aktuális kulturális környezetnek a típus által DateTime kiválasztott alapértelmezettre IFormatProvider gyakorolt hatását mutatja be.

public class IFormatProviderTest
{
    public static void Main1304()
    {
        string dt = "6/4/1900 12:15:12";

        // The default behavior of DateTime.Parse is to use
        // the current culture.

        // Violates rule: SpecifyIFormatProvider.
        DateTime myDateTime = DateTime.Parse(dt);
        Console.WriteLine(myDateTime);

        // Change the current culture to the French culture,
        // and parsing the same string yields a different value.

        Thread.CurrentThread.CurrentCulture = new CultureInfo("Fr-fr", true);
        myDateTime = DateTime.Parse(dt);

        Console.WriteLine(myDateTime);
    }
}

Ez a példa a következő kimenetet hozza létre:

6/4/1900 12:15:12 PM
06/04/1900 12:15:12

Lásd még