CA1304: Especificar CultureInfo

TypeName

SpecifyCultureInfo

CheckId

CA1304

<strong>Categoria</strong>

Microsoft.Globalization

Alteração significativa

Não-separável

Causa

Um método ou construtor chama um membro que possui uma sobrecarga que aceita um System.Globalization.CultureInfo parâmetro e o método ou construtor não chamar a sobrecarga que utiliza o CultureInfo parâmetro. Esta regra ignora as 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 que é fornecido pelo membro sobrecarregado não tenha o efeito que deseja em todas as localidades. Além disso, .NET Framework os membros escolhem a cultura padrão e formatação com base em premissas que podem não estar corretas para 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 as diretrizes a seguir:

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

  • Se o valor será armazenado e acessado por software, ou seja, mantidas em 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 o provedor especifique a cultura.

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

Mesmo que o comportamento padrão do membro sobrecarregado seja adequado às suas necessidades, é melhor chamar explicitamente a sobrecarga de culture-specific para que seu código seja autodocumentação e mais facilmente mantidas.

Como corrigir violações

Para corrigir uma violação desta regra, use a sobrecarga que utiliza um CultureInfo ou IFormatProvider e especificar o argumento de acordo com as diretrizes que foram listados anteriormente.

Quando suprimir avisos

É seguro eliminar um aviso esta 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 de regra. GoodMethodcorrige a primeira violação, passando a cultura invariável para System.String.Compare e corrige a segunda violação, passando a cultura atual como ToLower porque string3 é exibida ao 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 atual do padrão IFormatProvider que é selecionado pela DateTime tipo.

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

O exemplo produz a seguinte saída.

  

Regras relacionadas

CA1305: Especificar IFormatProvider

Consulte também

Conceitos

Usando a classe CultureInfo