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