c# - validar - ¿Cómo puedo hacer una comparación de cadenas insensible a mayúsculas y minúsculas?
textbox mayusculas c# (8)
¿Cómo puedo hacer que la línea de abajo no distinga entre mayúsculas y minúsculas?
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
Me dieron algunos consejos hoy que sugirieron que use:
x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
el problema es que no puedo hacer que esto funcione, he intentado con la línea siguiente, esta compila pero arroja los resultados incorrectos, devuelve a los usuarios inscritos como usuarios no inscritos y no inscritos como inscritos.
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)));
¿Alguien puede señalar el problema?
¿Qué tal si utilizas StringComparison.CurrentCultureIgnoreCase
?
Creo que encontrarás más información en este enlace:
http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/
Use el método Compare static en la clase String para comparar las dos cadenas. Si la comparación no distingue entre mayúsculas y minúsculas está determinada por el tercer parámetro de una de sus sobrecargas. Por ejemplo:
string lowerCase = "abc";
string upperCase = "AbC";
int caseInsensitiveResult = string.Compare(lowerCase, upperCase,
StringComparison.CurrentCultureIgnoreCase);
int caseSensitiveResult = string.Compare(lowerCase,
StringComparison.CurrentCulture);
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).
Debería usar la función estática String.Compare
como sigue
x => String.Compare (x.Username, (string)drUser["Username"],
StringComparison.OrdinalIgnoreCase) == 0
Esta no es la mejor práctica en .NET framework (4 y +) para verificar la igualdad
String.Compare(x.Username, (string)drUser["Username"],
StringComparison.OrdinalIgnoreCase) == 0
Use lo siguiente en su lugar
String.Equals(x.Username, (string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)
- Use una sobrecarga del método String.Equals para probar si dos cadenas son iguales.
- Utilice los métodos String.Compare y String.CompareTo para ordenar cadenas, no para verificar la igualdad .
Otras respuestas son totalmente válidas aquí, pero de alguna manera lleva tiempo StringComparison.OrdinalIgnoreCase
y también usar String.Compare
.
He codificado el método simple de extensión de cadena, donde puedes especificar si la comparación es sensible a mayúsculas y minúsculas o no tiene sentido con booleano, adjuntando todo el fragmento de código aquí:
using System;
/// <summary>
/// String helpers.
/// </summary>
public static class StringExtensions
{
/// <summary>
/// Compares two strings, set ignoreCase to true to ignore case comparison (''A'' == ''a'')
/// </summary>
public static bool CompareTo(this string strA, string strB, bool ignoreCase)
{
return String.Compare(strA, strB, ignoreCase) == 0;
}
}
Después de que toda la comparación se acorta en 10 caracteres aproximadamente, compare:
Antes de usar la extensión de cadena:
String.Compare(testFilename, testToStart,true) != 0
Después de usar la extensión de cadena:
testFilename.CompareTo(testToStart, true)
Por favor use esto para comparar:
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
Puede (aunque controversial) extender System.String
para proporcionar un método de extensión de comparación que no distingue entre mayúsculas y minúsculas:
public static bool CIEquals(this String a, String b) {
return a.Equals(b, StringComparison.CurrentCultureIgnoreCase);
}
y uso como tal:
x.Username.CIEquals((string)drUser["Username"]);
C # le permite crear métodos de extensión que pueden servir como sintaxis suggar en su proyecto, bastante útil, diría yo.
No es la respuesta y sé que esta pregunta es vieja y está resuelta, solo quería agregar estos bits.
siempre puedes usar funciones: .ToLower (); .Upper ();
convierte tus cuerdas y luego compáralas ...
Buena suerte