Como faço para que a linha abaixo não diferencie maiúsculas de minúsculas?
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
Hoje recebi alguns conselhos que sugeriam o uso de:
x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
o problema é que não consigo fazer isso funcionar, tentei a linha abaixo, compila, mas retorna os resultados errados, retorna usuários inscritos como não inscritos e usuários não inscritos como inscritos.
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)));
Alguém pode apontar o problema?
drUser["Enrolled"]
ser? Parece um valor booleano, masFindIndex()
retorna o índice. Se o índice desse usuário for 0, ele retornará 0, o que pode ser falso. Quando, na realidade, é verdade. OExists()
método pode ser melhor neste caso.Respostas:
Esta não é a melhor prática no .NET framework (4 e +) para verificar a igualdade
Use o seguinte
O MSDN recomenda:
fonte
string.Compare
, nãoString.Compare
.string
é uma prática melhor doString
que é uma palavra-chave no idioma. Por um lado,String
poderia ser algo diferente deSystem.String
, enquantostring
não pode ser. Além disso,string
é mais ou menos garantido que exista em C #, enquantoString
é tecnicamente parte do .NET em vez de C #.Você deve usar a
String.Compare
função estática como a seguirfonte
String.Equals
vez deString.Compare
. Não há necessidade de calcular qual é o maior, apenas que eles não são iguais.IEquatable
eIComparable
NÃO faça a mesma coisa, e você pode ter classes que implementam uma, mas nas quais não faria sentido implementar a outra. Por exemplo, você pode solicitar amostragens de sensores por tempo sem que nenhuma delas seja igual (IComparable). E você pode indicar se as coisas são iguais (IEquatable), mas não faz sentido encomendá-las (por exemplo, números de série do computador).Por favor, use isso para comparação:
fonte
Outras respostas são totalmente válidas aqui, mas, de alguma forma, leva algum tempo para digitar
StringComparison.OrdinalIgnoreCase
e também usarString.Compare
.Eu codifiquei o método simples de extensão String, onde você pode especificar se a comparação diferencia maiúsculas de minúsculas ou sem maiúsculas e minúsculas com booleano, anexando um trecho de código inteiro aqui:
Após toda essa comparação, diminui aproximadamente 10 caracteres - compare:
Antes de usar a extensão String:
Depois de usar a extensão String:
fonte
Você pode (embora polêmico) estender
System.String
para fornecer um método de extensão de comparação sem distinção entre maiúsculas e minúsculas:e use como tal:
O C # permite que você crie métodos de extensão que podem servir como sugadores de sintaxe em seu projeto, bastante útil, eu diria.
Não é a resposta e eu sei que esta pergunta é antiga e resolvida, eu só queria adicionar esses bits.
fonte
Eu acho que você encontrará mais informações neste link:
http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/
Use o método estático Compare na classe String para comparar as duas seqüências. Se a comparação não diferencia maiúsculas de minúsculas é determinada pelo terceiro parâmetro de uma de suas sobrecargas. Por exemplo:
O valor caseSensitiveResult é -1 (indicando que lowerCase é "menor que" upperCase) e o caseInsensitiveResult é zero (indicando que lowerCase "é igual a" upperCase)).
fonte
Que tal usar
StringComparison.CurrentCultureIgnoreCase
?fonte
Eu gostaria de escrever um método de extensão para EqualsIgnoreCase
fonte
você sempre pode usar funções: .ToLower (); .ToUpper ();
converta suas cordas e compare-as ...
Boa sorte
fonte