Qual a diferença e quando usar o que? Qual é o risco se eu sempre uso ToLower () e qual é o risco se eu sempre uso ToLowerInvariant ()?
Dependendo da cultura atual, o ToLower pode produzir uma letra minúscula específica da cultura, que você não está esperando. Tal como produzir ınfo
sem o ponto no i em vez de info
e, assim, obtendo comparações de strings. Por esse motivo, o ToLowerInvariant deve ser usado em qualquer dado não específico do idioma. Quando você pode ter inputs do usuário que podem estar em seu idioma nativo / conjunto de caracteres, geralmente seria a única vez que você usa o ToLower.
Veja esta pergunta para um exemplo desse problema: C # – ToLower () às vezes é removendo o ponto da letra “I”
Eu acho que isso pode ser útil:
http://msdn.microsoft.com/pt-br/library/system.string.tolowerinvariant.aspx
atualizar
Se o seu aplicativo depender do caso de uma cadeia de caracteres ser alterada de maneira previsível e 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
… O ToLower é muito semelhante na maioria dos lugares ao ToLowerInvariant. Os documentos indicam que esses methods só mudarão o comportamento com as 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 …
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
String.ToLower()
usa a cultura padrão enquanto String.ToLowerInvariant()
usa a cultura invariável. Então você está essencialmente perguntando as diferenças entre cultura invariável e comparação de cadeia ordinal .
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, cadeias de caracteres que devem ser enums, etc.) use ToLowerInvariant()
.
Exemplos:
= Usando ToLowerInvariant
incorretamente =
Em turco, DIŞ
significa “fora” e diş
significa “dente”. O revestimento inferior da DIŞ
é dış
. Então, se você usar ToLowerInvariant
incorretamente, você pode ter erros de digitação na Turquia.
= Usando ToLower
incorretamente =
Agora finja que você está escrevendo um analisador de SQL. Em algum lugar você terá código parecido com:
if(operator.ToLower() == "like") { // Handle an SQL LIKE operator }
A gramática do SQL não muda quando você muda de cultura. Um francês não escreve SÉLECTIONNEZ x DE books
vez de SÉLECTIONNEZ x DE books
SELECT X FROM books
. No entanto, para que o código acima funcione, um turco precisaria escrever SELECT x FROM books WHERE Author LİKE '%Adams%'
(observe o ponto acima da letra i, quase impossível de ver). Isso seria muito frustrante para o seu usuário turco.