CA1304: Zadejte možnosti CultureInfo
Název_typu |
SpecifyCultureInfo |
CheckId |
CA1304 |
Kategorie |
Microsoft.Globalization |
Změnit rozdělení |
Bez rozdělení |
Příčina
Metody nebo konstruktoru vyvolá člen, který má při přetížení, který přijímá CultureInfo parametr a metody nebo konstruktoru nevyvolá přetížení, že trvá CultureInfo parametr.Toto pravidlo ignoruje volání následujících metod:
Popis pravidla
Když CultureInfo nebo IFormatProvider objektu není zadán, výchozí hodnotu, která dodává přetížené členské máte vliv ve všech národních prostředích.Také .NET Framework členů zvolte výchozí kultury a formátování na základě předpokladů, které nemusí být správné, aby váš kód.Chcete-li zajistit, aby že kód funguje podle očekávání pro vaše scénáře, by měla poskytovat specifické informace podle následujících pokynů:
Pokud hodnota se zobrazí uživateli, použijte aktuální.Viz téma CultureInfo.CurrentCulture.
Pokud hodnota bude uložena a přistupuje k softwaru, uložených do souboru nebo databáze, použijte výchozí kultury.Viz téma CultureInfo.InvariantCulture.
Pokud neznáte cílové hodnoty, mít spotřebitel dat nebo určit zprostředkovatele kultury.
Všimněte si, že CultureInfo.CurrentUICulture se používá pouze při načtení lokalizované prostředky pomocí instance ResourceManager třídy.
I v případě, že výchozí chování přetížené členské je vhodné pro vaše potřeby, je lepší explicitně volat přetížení specifické tak, aby váš kód je automatické protokolování prováděných a snadněji udržované.
Jak opravit porušení
Porušení tohoto pravidla pomocí opravit přetížení, že trvá CultureInfo nebo IFormatProvider a zadat argument podle pokynů uvedených výše.
Při potlačení upozornění
Je bezpečné potlačit varování od tohoto pravidla, pokud je jisté, že výchozí zprostředkovatel kultura/formát je správný výběr a požadavky na servis kód není prioritou důležitý vývoj.
Příklad
V následujícím příkladu BadMethod způsobuje dvě porušení tohoto pravidla.GoodMethodopraví první porušení předáním výchozí kultury System.String.Compare a předáním aktuální jazyková verze se opravuje druhé porušení ToLower protože string3 se zobrazí uživateli.
using System;
using System.Globalization;
namespace GlobalizationLibrary
{
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));
}
}
}
}
Následující příklad ukazuje účinek aktuální kultury na výchozí IFormatProvider vybrané podle DateTime typu.
using System;
using System.Globalization;
using System.Threading;
namespace GlobalLibGlobalLibrary
{
public class IFormatProviderTest
{
public static void Main()
{
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);
}
}
}
Tento příklad vytvoří následující výstup.
Souvisejících pravidel
CA1305: Zadejte možnosti IFormatProvider