2012-05-02 6 views
7

Così ho un condizionale che attualmente appare così ...Controllo multipla contiene su una sola corda

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

ho bisogno di aggiungere un paio di personaggi che voglio controllare e chiedevo se c'è un altro sintassi condensata per realizzare la stessa cosa? Qualcosa di simile all'operatore di SQL IN?

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

Qualcuno sa di trucchi interessanti per realizzare questo senza aggiungere un sacco di codice?

+0

simile a questa domanda http://stackoverflow.com/questions/194930/how-do-i-use-linq-containsstring-instead-of-containsstring – hatchet

+0

ho visto questa domanda, ero sperando di riuscire a trovare una soluzione più semplice visto che conosco tutti i personaggi che sto cercando in anticipo (cosa che ringrazio per tutte le risposte!). –

+0

possibile duplicato di [VB.NET - Aggiunta di più di 1 stringa a .contains] (http://stackoverflow.com/questions/2212719/vb-net-adding-more-than-1-string-to-contains) – KyleMit

risposta

22

Considerare utilizzando Regex (specificare i caratteri che si desidera controllare tra parentesi - ricordate che alcuni di loro deve essere sfuggito):

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

o

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

ne dici di questo?

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

    } 
+0

Solo una cosa: IndexOfAny gestisce solo i singoli caratteri, non gestisce le stringhe. – empi

+0

Nell'OP vengono controllati solo i singoli caratteri. – ja72

+1

ovviamente, era solo una nota a margine, perché IndexOf in realtà ha una versione sovraccaricata con stringa. – empi

2

Prova

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

o

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

Si potrebbe usare un po 'di Linq:

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

Si potrebbe utilizzare String.IndexOfAny - Si esplorerà la stringa per uno qualsiasi di un set di caratteri in un array:

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

Questa vittoria è la più breve?

@".,/\".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

Non funziona in C#. La stringa del tipo non contiene una definizione per "ContainsAny" – Drkawashima