Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA1304 |
| Cím | A CultureInfo megadása |
| Kategória | Globalizáció |
| A javítás kompatibilitástörő vagy nem törik | nem-törhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
Ok
Egy metódus vagy konstruktor olyan tagot hív meg, amely túlterheléssel rendelkezik, és amely elfogad egy paramétert, System.Globalization.CultureInfo, de a metódus vagy a konstruktor nem hívja meg azt a túlterhelést, amely a CultureInfo paramétert fogadja el. 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 objektum nincs megadva, előfordulhat, hogy a túlterhelt tag által biztosított alapértelmezett érték nem minden területi beállításban eredményezi az Ön által kívánt hatást. 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 jelenik meg 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 a CultureInfo argumentumot igénylő túlterhelési verziót.
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 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 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
Feljegyzés
Cserélje le a XXXXCAXXXX 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ő teljesen kvalifikált 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. -
.ctorkonstruktorok és.cctorstatikus 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 |
Megfelel minden MyType1 vagy MyType2 nevű szimbólumnak. |
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) |
A megadott metódusokat MyMethod1 és MyMethod2 a megfelelő teljesen minősített aláírásokkal párosítja. |
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
Feljegyzés
Cserélje le a XXXXCAXXXX 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ólumok teljesen minősített nevei a dokumentációazonosító formátumában, 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 |
Illeszkedik az összes MyType1 vagy MyType2 nevű típushoz, valamint azok összes származtatott típusához. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Egyezik egy adott MyType típussal, a megadott teljes névvel, és annak ö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 bemutatja, hogyan hat az aktuális kultúra a típus által kiválasztott alapértelmezésre IFormatProvider, amelyet a DateTime típus választ ki.
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