¿Cómo puedo hacer que la línea debajo de mayúsculas y minúsculas?
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
Hoy me dieron algunos consejos que sugirieron usar:
x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
el problema es que no puedo hacer que esto funcione, probé la línea a continuación, esto compila pero devuelve los resultados incorrectos, devuelve a los usuarios inscritos como no inscritos y usuarios no inscritos como inscritos.
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)));
¿Alguien puede señalar el problema?
drUser["Enrolled"]
ser? Parece un valor booleano, peroFindIndex()
devuelve el índice. Si el índice de ese usuario es 0, devolverá 0, que puede ser falso. Cuando, en realidad es cierto. ElExists()
método puede ser mejor en este caso.Respuestas:
Esta no es la mejor práctica en .NET Framework (4 y +) para verificar la igualdad
Use lo siguiente en su lugar
MSDN recomienda:
fuente
string.Compare
, noString.Compare
.string
es una mejor práctica queString
ya que es una palabra clave de lenguaje. Por un lado,String
podría ser algo más queSystem.String
, mientrasstring
que no puede ser. Además,string
está más o menos garantizado de existir en C #, mientrasString
que técnicamente es parte de .NET en lugar de C #.Debe usar la
String.Compare
función estática como la siguientefuente
String.Equals
lugar deString.Compare
. No es necesario calcular cuál es mayor, solo que no son iguales.IEquatable
yIComparable
NO hagas lo mismo, y puedes tener clases que implementen una, pero en las cuales NO tendría sentido implementar la otra. Por ejemplo, puede ordenar muestras de sensores por tiempo sin que ninguno de ellos sea igual (IComparable). Y puede indicar si las cosas son iguales (IEquatable) pero no tiene sentido ordenarlas (por ejemplo, números de serie de la computadora).Utilice esto para comparar:
fuente
Las respuestas de otros son totalmente válidas aquí, pero de alguna manera lleva algún tiempo escribirlas
StringComparison.OrdinalIgnoreCase
y también usarlasString.Compare
.Codifiqué un método de extensión de cadena simple, donde podría especificar si la comparación distingue mayúsculas de minúsculas o mayúsculas y minúsculas con boolean, adjuntando el fragmento de código completo aquí:
Después de que toda la comparación se acorta en 10 caracteres aproximadamente, compare:
Antes de usar la extensión de cadena:
Después de usar la extensión de cadena:
fuente
Puede (aunque controvertido) extenderse
System.String
para proporcionar un método de extensión de comparación sin distinción entre mayúsculas y minúsculas:y usar como tal:
C # le permite crear métodos de extensión que pueden servir como sugerencia de sintaxis en su proyecto, bastante útil, diría yo.
No es la respuesta y sé que esta pregunta es antigua y está resuelta, solo quería agregar estos bits.
fuente
Creo que encontrará más información en este enlace:
http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/
Use el método Comparar estático en la clase Cadena para comparar las dos cadenas. El tercer parámetro de una de sus sobrecargas determina si la comparación no distingue entre mayúsculas y minúsculas. Por ejemplo:
El valor caseSensitiveResult es -1 (lo que indica que lowerCase es "menor que" upperCase) y caseInsensitiveResult es cero (lo que indica que lowerCase "es igual a" upperCase).
fuente
¿Qué hay de usar en su
StringComparison.CurrentCultureIgnoreCase
lugar?fuente
Me gustaría escribir un método de extensión para EqualsIgnoreCase
fuente
siempre puedes usar funciones: .ToLower (); .ToUpper ();
convierte tus cadenas y luego compáralas ...
Buena suerte
fuente