Sdílet prostřednictvím


CA1305: Zadejte možnosti IFormatProvider

Název_typu

SpecifyIFormatProvider

CheckId

CA1305

Kategorie

Microsoft.Globalization

Změnit rozdělení

Bez rozdělení

Příčina

Metody nebo konstruktoru vyvolá jeden nebo více členů, které mají přetížení, které přijímají IFormatProvider parametr a metody nebo konstruktoru nevyvolá přetížení, že trvá IFormatProvider parametr.Toto pravidlo ignoruje volání .NET Framework metod, které jsou popsány jako ignorování IFormatProvider parametr a dále následující metody:

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 se ujistit, ž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čí upozornění od tohoto pravidla, pokud je jisté, že výchozí zprostředkovatel kultura/formát je správný výběr a není-li kód požadavky na servis důležité prioritních.

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 na Comparea 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

CA1304: Zadejte možnosti CultureInfo

Viz také

Další zdroje

Použití třídy CultureInfo