Partilhar via


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.

Consulte também