Compartilhar via


Especificar IFormatProvider

TypeName

SpecifyIFormatProvider

CheckId

CA1305

Category (Categoria)

Microsoft.globalização

Quebrando alterar

Não separável

Causa

Um método ou construtor chama um ou mais membros têm sobrecargas que aceitam um System.IFormatProvider parâmetro e o método ou construtor não chama a sobrecarga que aceita o IFormatProvider parâmetro. Esta regra ignora chamadas para .NET Framework métodos documentados sistema autônomo ignorando o IFormatProvider parâmetro e além dos seguintes métodos:

Descrição da regra

Quando um System.Globalization.CultureInfo ou 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 será armazenado e acessado por software (transferida 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 Comparee 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 CultureInfo

Consulte também

Conceitos

Usando a classe CultureInfo