Se puede utilizar el método de extensión de la .Contains()
System.Linq espacio de nombres:
if (abc.ToLower().Contains('s')) { }
Y no, para comprobar si una expresión booleana es verdadera, no es necesario == true
Desde el Contains
método es un método de extensión, mi solución parecía ser confusa para algunos. Aquí hay dos versiones que no requieren que agregue using System.Linq;
:
if (abc.ToLower().IndexOf('s') != -1) { }
// or:
if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
actualización
Si lo desea, puede escribir su propio método de extensiones para facilitar la reutilización:
public static class MyStringExtensions
{
public static bool ContainsAnyCaseInvariant(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase) != -1;
}
public static bool ContainsAnyCase(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.CurrentCultureIgnoreCase) != -1;
}
}
Entonces puede llamarlo así:
if (def.ContainsAnyCaseInvariant('s')) { }
// or
if (def.ContainsAnyCase('s')) { }
En la mayoría de los casos al tratar con datos de usuario, realmente desea utilizar CurrentCultureIgnoreCase
(o el método de extensión ContainsAnyCase
), porque de esa manera permite que el sistema maneje problemas de mayúsculas/minúsculas, que dependen del idioma. Cuando se trata de problemas computacionales, como nombres de etiquetas HTML, etc., desea utilizar la cultura invariable.
Por ejemplo: En turco, la letra mayúscula I
en minúsculas es ı
(sin punto) y no i
(con un punto).
Hmm, no me parece una sobrecarga de String.Contains que toma un argumento de carbón. –
@ScottSmith Este es un método de extensión definido en [System.Linq] (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx). Necesita agregar 'using System.Linq;' – pauloya
Prefiero usar 'str.IndexOf ('s')> = 0' pero es probable que sea solo una diferencia estilística. Tiene más sentido para mí cuando leo para comprensión. – CSS