CA1305: Especificar IFormatProvider
TypeName |
SpecifyIFormatProvider |
CheckId |
CA1305 |
<strong>Categoria</strong> |
Microsoft.Globalization |
Alteração significativa |
Não-separável |
Causa
Um método ou construtor chama um ou mais membros têm sobrecargas que aceitam uma System.IFormatProvider parâmetro e o método ou construtor não chamar a sobrecarga que utiliza o IFormatProvider parâmetro. Esta regra ignora chamadas para .NET Framework métodos documentados como ignorando o IFormatProvider parâmetro e além para os seguintes métodos:
Descrição da regra
Quando um System.Globalization.CultureInfo ou 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 certificar-se de 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 (persistida 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 Comparee 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
CA1304: Especificar CultureInfo