Sdílet prostřednictvím


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

Viz také

Další zdroje

Použití třídy CultureInfo