Especificar CultureInfo

TypeName

SpecifyCultureInfo

CheckId

CA1304

Category (Categoria)

Microsoft.globalização

Quebrando alterar

Não separável

Causa

Um método ou construtor telefonar s um membro que tem uma sobrecarga que aceita um System.Globalization.CultureInfo parâmetro e o método ou construtor não telefonar a sobrecarga que aceita o CultureInfo parâmetro. Esta regra ignora chamadas para os seguintes métodos:

Descrição da regra

Quando um CultureInfo ou System.IFormatProvider objeto não for fornecido, o valor padrão fornecido pelo membro sobrecarregado não tenha o efeito que você deseja em todas as localidades. Além disso, .NET Framework membros escolher cultura padrão e formatação baseado em suposições que podem não estar corretas para o seu código. Para garantir que o código funciona conforme o esperado para seus cenários, você deve fornecer informações específicas de cultura de acordo com sistema autônomo diretrizes a seguir:

  • Se o valor será exibido para o usuário, use a cultura corrente.Consulte CultureInfo.CurrentCulture.

  • Se o valor for armazenado e acessado por software, ou seja, transferidas para um arquivo ou banco de dados, use a cultura invariável.Consulte CultureInfo.InvariantCulture.

  • Se você não souber o destino do valor, ter o consumidor de dados ou provedor Especifica a cultura.

Observe que CultureInfo.CurrentUICulture é usado somente para recuperar recursos localizados usando uma instância das System.Resources.ResourceManager classe.

Mesmo que o comportamento padrão do membro sobrecarregado seja adequado às suas necessidades, é melhor chamar explicitamente a sobrecarga específicos da cultura para que seu código seja autodescritivo e mais com com facilidade mantidas.

Como corrigir violações

Para corrigir uma violação dessa regra, use a sobrecarga que aceita um CultureInfo ou IFormatProvidere especificar o argumento de acordo com as diretrizes listadas anteriormente.

Quando suprimir avisos

É seguro eliminar um aviso da regra quando estiver certo de que o provedor de cultura/formato padrão é a opção correta e onde a capacidade de manutenção do código não é uma prioridade importante do desenvolvimento.

Exemplo

No exemplo a seguir, BadMethod faz com que dois violações dessa regra. GoodMethod corrige a primeira violação, passando a cultura invariável para sistema.String.comparar e corrige a violação de segunda, passando a cultura corrente para ToLower porque string3 está sendo exibido para o usuário.

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));
            }
        }
    }
}

O exemplo a seguir mostra o efeito da cultura corrente sobre o padrão de IFormatProvider selecionado pela DateTime Digite.

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);
        }
    }
}

Esse exemplo produz a seguinte saída.

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

Regras relacionadas

Especificar IFormatProvider

Consulte também

Conceitos

Usando a classe CultureInfo