CA1305: especificar IFormatProvider
TypeName |
SpecifyIFormatProvider |
CheckId |
CA1305 |
Categoria |
Microsoft.Globalization |
Alteração Significativa |
Sem quebra |
Causa
Um método ou um construtor chamam um ou mais membros que têm as sobrecargas que aceitam um parâmetro de IFormatProvider , e o método ou o construtor não chama a sobrecarga que usa o parâmetro de IFormatProvider .Esta regra ignora chamadas para os métodos de .NET Framework que são documentados como ignorar o parâmetro de IFormatProvider e adicionalmente os seguintes métodos:
Descrição da Regra
Quando um objeto de CultureInfo ou de IFormatProvider não for fornecido, o valor padrão que é fornecido pelo membro sobrecarregado não pode ter o efeito desejado em todas as localidades.Além disso, os membros de .NET Framework eles escolhem a cultura padrão e a formatação com base nas suposições 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 à cultura específica de acordo com as seguintes diretrizes:
Se o valor será exibido ao usuário, use a cultura atual.Consulte CultureInfo.CurrentCulture.
Se o valor será armazenado e acessado pelo software (persistente em um arquivo ou em uma base de dados), use a cultura invariável.Consulte CultureInfo.InvariantCulture.
Se você não souber o destino do valor, tem o consumidor ou o provedor de dados especificar a cultura.
Observe que CultureInfo.CurrentUICulture é usado para recuperar apenas recursos encontrados usando uma instância da classe de ResourceManager .
Se o comportamento padrão do membro sobrecarregado é apropriado para suas necessidades, é melhor chamar explicitamente a sobrecarga cultura específica para que seu código do seja documentando e mantido mais facilmente.
Como Corrigir Violações
Para corrigir uma violação desta regra, use a sobrecarga necessária CultureInfo ou IFormatProvider e especifique o argumento de acordo com as diretrizes que foi listada anteriormente.
Quando Suprimir Alertas
É seguro suprimir um aviso desta regra quando você tiver certeza de que o provedor padrão de cultura/formato é a escolha correta e onde a manutenibilidade de código não é uma prioridade importante de desenvolvimento.
Exemplo
No exemplo a seguir, BadMethod causa duas violações desta regra.GoodMethod corrigir a primeira violação passando a cultura invariável a Compare, e corrigir a segunda violação passando a cultura atual a ToLower porque string3 é exibido 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 da opção IFormatProvider que é selecionada pelo tipo de DateTime .
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
CA1304: especificar CultureInfo