Dependendo da cultura atual, o ToLower pode produzir uma letra minúscula específica da cultura, que você não está esperando. Como produzir ınfosem o ponto no i em vez deinfo e, assim, fazer comparações de strings. Por esse motivo, ToLowerInvariant deve ser usado em qualquer dado não específico do idioma. Quando você pode ter uma entrada do usuário que possa estar no idioma / conjunto de caracteres nativos, geralmente é a única vez que você usa o ToLower.
Se o seu aplicativo depender do caso de uma sequência ser alterada de maneira previsível, não afetada pela cultura atual, use o método ToLowerInvariant. O método ToLowerInvariant é equivalente a ToLower (CultureInfo.InvariantCulture). O método é recomendado quando uma coleção de seqüências de caracteres deve aparecer em uma ordem previsível em um controle de interface do usuário.
Além disso
... ToLower é muito semelhante na maioria dos lugares a ToLowerInvariant. Os documentos indicam que esses métodos apenas mudarão o comportamento das culturas turcas. Além disso, nos sistemas Windows, o sistema de arquivos não diferencia maiúsculas de minúsculas, o que limita ainda mais seu uso ...
Não, ele não é. "Ordinal" é uma terceira opção - uma maneira ligeiramente diferente de "ignorar" a cultura atual. A distinção não é relevante na discussão de ToLowervariantes; Ordinal vs. invariável apenas altera a "ordem de classificação" de duas cadeias, não altera a comparação de igualdade.
Home
27
TL; DR:
Ao trabalhar com "conteúdo" (por exemplo, artigos, postagens, comentários, nomes, lugares etc.), use ToLower(). Ao trabalhar com "literais" (por exemplo, argumentos de linha de comando, gramáticas personalizadas, strings que devem ser enumerações, etc.), use ToLowerInvariant().
Exemplos:
= Usando ToLowerInvariantincorretamente =
Em turco, DIŞsignifica "fora" e dişsignifica "dente". O revestimento inferior adequado de DIŞé dış. Portanto, se você usar ToLowerInvariantincorretamente, poderá ter erros de digitação na Turquia.
= Usando ToLowerincorretamente =
Agora finja que você está escrevendo um analisador SQL. Em algum lugar você terá um código parecido com:
if(operator.ToLower()=="like"){// Handle an SQL LIKE operator}
A gramática SQL não muda quando você altera culturas. Um francês não escreve em SÉLECTIONNEZ x DE booksvez de SELECT X FROM books. No entanto, para que o código acima funcione, uma pessoa turca precisaria escrever SELECT x FROM books WHERE Author LİKE '%Adams%'(observe o ponto acima da capital i, quase impossível de ver). Isso seria bastante frustrante para o seu usuário turco.
Respostas:
Dependendo da cultura atual, o ToLower pode produzir uma letra minúscula específica da cultura, que você não está esperando. Como produzir
ınfo
sem o ponto no i em vez deinfo
e, assim, fazer comparações de strings. Por esse motivo, ToLowerInvariant deve ser usado em qualquer dado não específico do idioma. Quando você pode ter uma entrada do usuário que possa estar no idioma / conjunto de caracteres nativos, geralmente é a única vez que você usa o ToLower.Veja esta pergunta para um exemplo desse problema: Às vezes, C # - ToLower () está removendo o ponto da letra "I"
fonte
Eu acho que isso pode ser útil:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
atualizar
Além disso
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
fonte
String.ToLower()
usa a cultura padrão enquantoString.ToLowerInvariant()
usa a cultura invariável. Então você está essencialmente perguntando as diferenças entre cultura invariável e comparação de cadeias ordinais .fonte
ToLower
variantes; Ordinal vs. invariável apenas altera a "ordem de classificação" de duas cadeias, não altera a comparação de igualdade.TL; DR:
Ao trabalhar com "conteúdo" (por exemplo, artigos, postagens, comentários, nomes, lugares etc.), use
ToLower()
. Ao trabalhar com "literais" (por exemplo, argumentos de linha de comando, gramáticas personalizadas, strings que devem ser enumerações, etc.), useToLowerInvariant()
.Exemplos:
= Usando
ToLowerInvariant
incorretamente =Em turco,
DIŞ
significa "fora" ediş
significa "dente". O revestimento inferior adequado deDIŞ
édış
. Portanto, se você usarToLowerInvariant
incorretamente, poderá ter erros de digitação na Turquia.= Usando
ToLower
incorretamente =Agora finja que você está escrevendo um analisador SQL. Em algum lugar você terá um código parecido com:
A gramática SQL não muda quando você altera culturas. Um francês não escreve em
SÉLECTIONNEZ x DE books
vez deSELECT X FROM books
. No entanto, para que o código acima funcione, uma pessoa turca precisaria escreverSELECT x FROM books WHERE Author LİKE '%Adams%'
(observe o ponto acima da capital i, quase impossível de ver). Isso seria bastante frustrante para o seu usuário turco.fonte