Em C #, qual é a diferença entre ToUpper()
e ToUpperInvariant()
?
Você pode dar um exemplo em que os resultados podem ser diferentes?
c#
internationalization
Lill Lansey
fonte
fonte
Respostas:
ToUpper
usa a cultura atual.ToUpperInvariant
usa a cultura invariável.O exemplo canônico é a Turquia, onde a letra maiúscula de "i" não é "I".
Código de exemplo mostrando a diferença:
Para saber mais sobre turco, consulte esta postagem no blog Turkey Test .
Eu não ficaria surpreso ao saber que existem vários outros problemas de maiúsculas em torno de personagens elidificados etc. -casando uma string e comparando-a com "MAIL". Isso não funcionou tão bem na Turquia ...
fonte
ımage
como um nome de campo para oImage
Unity 3D enviar um spam para um erro interno no consoleUnable to find key name that matches 'rıght'
em um Windows "inglês" com as configurações regionais da Turquia para data e hora. Parece que, às vezes, até a Microsoft falha no teste da Turquia, o idioma de um PC nem sequer é turco, apenas risos.A resposta de Jon é perfeita. Eu só queria acrescentar que
ToUpperInvariant
é o mesmo que ligarToUpper(CultureInfo.InvariantCulture)
.Isso torna o exemplo de Jon um pouco mais simples:
Eu também usei o New Times Roman porque é uma fonte mais legal.
Eu também definir o
Form
'sFont
propriedade em vez dos doisLabel
controles porque aFont
propriedade é herdada.E reduzi algumas outras linhas apenas porque gosto de código compacto (por exemplo, não de produção).
Eu realmente não tinha nada melhor para fazer no momento.
fonte
Comece com o MSDN
http://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx
Só porque um capital i é 'I' em inglês, nem sempre é assim.
fonte
String.ToUpper
eString.ToLower
pode dar resultados diferentes, dadas culturas diferentes. O exemplo mais conhecido é o exemplo turco , para o qual converter latim minúsculo "i" em maiúsculo não resulta em latim maiúsculo "I", mas no turco "I".Quanto a mim, foi confuso, mesmo com a imagem acima ( fonte ), escrevi um programa (veja o código-fonte abaixo) para ver a saída exata do exemplo turco:
Como você pode ver:
Culture.CultureInvariant
deixa os caracteres turcos como estãoToUpper
eToLower
são reversíveis, que colocam um caractere em minúsculas e depois em maiúsculas, o traz para a forma original, desde que para ambas as operações a mesma cultura tenha sido usada.De acordo com o MSDN , para Char.ToUpper e Char.ToLower Turco e Azeri são as únicas culturas afetadas porque são as únicas com diferenças de revestimento de caractere único. Para strings, pode haver mais culturas afetadas.
Código-fonte de um aplicativo de console usado para gerar a saída:
fonte
ToUpperInvariant usa as regras da cultura invariável
fonte
não há diferença em inglês. somente na cultura turca é possível encontrar uma diferença.
fonte