2012-05-02 16 views
7

Así que tienen un condicional que en la actualidad se ve así ...múltiples Comprobación contiene en una cadena de

if (input.Contains(",") || input.Contains("/") || input.Contains(@"\") || input.Contains(".")) 

tengo que añadir unas cuantas más caracteres que desea comprobar y me preguntaba si hay una mayor sintaxis condensada para lograr lo mismo? Algo similar al operador IN de SQL?

if (input IN (",", "/", @"\", ....etc) ) 

¿Alguien sabe de algunos trucos para lograr esto sin agregar muchos códigos?

+0

similar a esta pregunta http://stackoverflow.com/questions/194930/how-do-i-use-linq-containsstring-instead-of-containsstring – hatchet

+0

vi esa pregunta, yo estaba esperando poder encontrar una solución más fácil ya que conozco a todos los personajes que estoy buscando por adelantado (¡gracias por todas las respuestas!). –

+0

posible duplicado de [VB.NET - Agregar más de 1 cadena a .contains] (http://stackoverflow.com/questions/2212719/vb-net-adding-more-than-1-string-to-contains) – KyleMit

Respuesta

22

Considere el uso de expresiones regulares (especificar caracteres que desee comprobar en paréntesis - recuerde que algunos de ellos deben ser escapados):

Regex.IsMatch(input, @"[,/]"); 

o

new[] {",", "/"}.Any(input.Contains) 
8

¿Qué tal esto?

if(input.IndexOfAny(new char[] { ',', '/', '\\', '.' })>=0) 
    { 

    } 
+0

Solo una cosa: IndexOfAny maneja solo caracteres individuales, no maneja cadenas. – empi

+0

En el OP, solo se verifican los caracteres individuales. – ja72

+1

por supuesto, eso era solo una nota al margen, porque IndexOf en realidad tiene una versión sobrecargada con una cadena. – empi

2

Trate

If (input.IndexOfAny(new char[] { ',', '/', '\\', '.' }) >= 0) { 
    ... 
} 

o

If (input.IndexOfAny(@",/\.".ToCharArray()) >= 0) { 
    ... 
} 
3

Se podría utilizar un poco de LINQ:

if (",/\\.".ToCharArray().Any(c => input.Contains(c))) 
3

Usted podría utilizar String.IndexOfAny - Se explorará la cadena de cualquiera de un conjunto de caracteres en una matriz:

if (e.Label.IndexOfAny(new char[]{',', '/', @'\', '.' /* other chars here */}) > -1) 
5

¿Esto gana por el más corto?

@".,/\".Any(input.Contains) 
3
"asdfasdf".ContainsAny(".","/","4"); 

public static bool ContainsAny(this string stringToCheck, params string[] parameters) 
{ 
    return parameters.Any(parameter => stringToCheck.Contains(parameter)); 
} 
+0

No funciona en C#. El tipo cadena no contiene una definición para "ContainsAny" – Drkawashima

Cuestiones relacionadas