string.ToLower () e string.ToLowerInvariant ()

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.