Realizar alterações de maiúsculas e minúsculas sem distinção de cultura
Os String.ToUppermétodos , String.ToLower, Char.ToUpper, e Char.ToLower fornecem sobrecargas que não aceitam nenhum parâmetro. 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 que diferenciam maiúsculas de minúsculas que podem variar de acordo com a cultura. Para deixar claro se você deseja que as alterações de maiúsculas e minúsculas sejam sensíveis à cultura ou à cultura, você deve usar as sobrecargas desses métodos que exigem que você especifique explicitamente um culture
parâmetro. Para alterações de maiúsculas e minúsculas sensíveis à cultura, especifique CultureInfo.CurrentCulture
o culture
parâmetro. Para alterações de maiúsculas e minúsculas que não diferenciam cultura, especifique CultureInfo.InvariantCulture
o culture
parâmetro.
Muitas vezes, as cadeias de caracteres são convertidas em um caso padrão para permitir uma pesquisa mais fácil mais tarde. Quando as cadeias de caracteres são usadas dessa maneira, você deve especificar CultureInfo.InvariantCulture
para o culture
parâmetro, porque o valor de Thread.CurrentCulture pode potencialmente mudar entre o momento em que o caso é alterado e o momento em que a pesquisa ocorre.
Se uma decisão de segurança for baseada em uma operação de alteração de caso, a operação deve ser insensível à cultura para garantir que o resultado não seja afetado pelo valor de CultureInfo.CurrentCulture
. Consulte a seção "Comparações de cadeia de caracteres que usam a cultura atual" do artigo Práticas recomendadas para usar cadeias de caracteres para obter um exemplo que demonstra como operações de cadeia de caracteres sensíveis à cultura podem produzir resultados inconsistentes.
String.ToUpper e String.ToLower
Para maior clareza do código, é recomendável que você sempre use sobrecargas dos String.ToUpper
métodos e String.ToLower
que permitem especificar uma cultura explicitamente. Por exemplo, o código a seguir executa uma pesquisa de identificador. A key.ToLower
operação é 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()];
}
Se você quiser que a key.ToLower
operação não diferencie a cultura, altere o exemplo anterior da seguinte forma para usar CultureInfo.InvariantCulture
explicitamente ao alterar as 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 Char.ToUpper
métodos e Char.ToLower
tenham as mesmas características que os String.ToUpper
e String.ToLower
métodos, as únicas culturas que são afetadas são turco (Türkiye) e azeri (latim, Azerbaijão). Estas são as duas únicas culturas com diferenças de caixa de caráter único. Para obter mais detalhes sobre esse mapeamento de caso exclusivo, consulte a seção "Caixa" na documentação da String classe. Para clareza do código e para garantir resultados consistentes, é recomendável que você sempre use as sobrecargas desses métodos que aceitam um CultureInfo parâmetro.