Executar alterações de maiúsculas e minúsculas que não diferenciam a cultura
Os métodos String.ToUpper, String.ToLower, Char.ToUpper e Char.ToLower fornecem sobrecargas que não aceitam quaisquer parâmetros. Por padrão, essas sobrecargas sem parâmetros executam alterações de maiúsculas e minúsculas com base no valor do CultureInfo.CurrentCulture. Isso produz resultados sensíveis a maiúsculas e minúsculas que podem variar de acordo com a cultura. Para deixar claro se você deseja que as mudanças de maiúsculas e minúsculas sejam sensíveis à cultura ou não sejam insensíveis à cultura, você deve usar as sobrecargas desses métodos que exigem que você especifique explicitamente um parâmetro culture
. Para mudanças de maiúsculas e minúsculas sensíveis à cultura, especifique CultureInfo.CurrentCulture
para o parâmetro culture
. Para mudanças de maiúsculas e minúsculas insensíveis à cultura, especifique CultureInfo.InvariantCulture
para o parâmetro culture
.
Muitas vezes, as cadeias de caracteres são convertidas em um formato padrão para permitir uma pesquisa mais fácil. Quando as cadeias de caracteres são usadas dessa maneira, você deve especificar CultureInfo.InvariantCulture
para o parâmetro culture
, pois o valor de Thread.CurrentCulture pode mudar potencialmente entre o tempo que o formato é alterado e o tempo que a pesquisa ocorre.
Se uma decisão de segurança é baseada em uma operação de modificação de maiúsculas e minúsculas, a operação deve ser insensível à cultura para garantir que o resultado não seja afetado pelo valor de CultureInfo.CurrentCulture
. Confira a seção "Comparações de cadeia de caracteres que usam a cultura atual" Práticas recomendadas para usar cadeias de caracteres para obter um exemplo que demonstra como as operações de cadeias de caracteres que diferenciam a cultura podem produzir resultados inconsistentes.
String.ToUpper e String.ToLower
Para maior clareza do código, é recomendado sempre usar sobrecargas dos métodos String.ToUpper
e String.ToLower
, que permitem especificar uma cultura explicitamente. Por exemplo, o código a seguir realiza uma pesquisa de identificador. A operação key.ToLower
é sensível à cultura por padrão, mas esse comportamento não fica claro ao ler o código.
Exemplo
Shared Function LookupKey(key As String) As Object
Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
return internalHashtable[key.ToLower()];
}
Para que a operação key.ToLower
não faça distinção de cultura, altere o exemplo anterior como a seguir para usar CultureInfo.InvariantCulture
explicitamente ao alterar maiúsculas e minúsculas.
Shared Function LookupKey(key As String) As Object
Return internalHashtable(key.ToLower(CultureInfo.InvariantCulture))
End Function
static object LookupKey(string key)
{
return internalHashtable[key.ToLower(CultureInfo.InvariantCulture)];
}
Char.ToUpper e Char.ToLower
Embora os métodos Char.ToUpper
e Char.ToLower
tenham as mesmas características que os métodos String.ToUpper
e String.ToLower
, as únicas culturas afetadas são a turca (Turquia) e a azeri (latim, Azerbaijão). Essas são apenas duas culturas com diferenças de maiúsculas e minúsculas de um único caractere. Para saber mais sobre esse mapeamento exclusivo de maiúsculas e minúsculas, confira a seção "Maiúsculas e minúsculas" na documentação da classe String. Para clareza de código e para garantir resultados consistentes, é recomendado sempre usar as sobrecargas desses métodos que aceitam um parâmetro CultureInfo.