2012-05-02 9 views
7

więc mam warunkowy, który obecnie wygląda tak ...Sprawdzanie wielokrotnego zawiera na jednej strunie

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

trzeba dodać jeszcze kilka znaków, które chcę, aby sprawdzić, i zastanawiałem się, czy istnieje bardziej skrócona składnia, aby osiągnąć to samo? Coś podobnego do operatora IN-SQL?

Ktoś wie o jakichś fajnych sztuczkach, aby to osiągnąć bez dodawania mnóstwa kodu?

+0

podobna do tej kwestii http://stackoverflow.com/questions/194930/how-do-i-use-linq-containsstring-instead-of-containsstring – hatchet

+0

Widziałem, że pytanie, byłem mając nadzieję, że znajdę łatwiejsze rozwiązanie, ponieważ znam wszystkie postacie, których szukam z wyprzedzeniem (które dziękuję za wszystkie odpowiedzi!). –

+0

możliwy duplikat [VB.NET - dodanie więcej niż 1 ciągu znaków do .contains] (http://stackoverflow.com/questions/2212719/vb-net-adding-more-than-1- string-to-contains) – KyleMit

Odpowiedz

22

Rozważ użycie wyrażeń regularnych (określić znaki, które chcesz sprawdzić, w nawiasach - należy pamiętać, że niektóre z nich muszą być uciekł):

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

lub

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

Jak na ten temat?

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

    } 
+0

Tylko jedno: IndexOfAny obsługuje tylko pojedyncze znaki, nie obsługuje ciągów. – empi

+0

W OP tylko pojedyncze znaki są sprawdzane. – ja72

+1

oczywiście, to była tylko uwaga dodatkowa, ponieważ IndexOf rzeczywiście ma przeciążoną wersję z ciągiem znaków. – empi

2

Spróbuj

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

lub

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

Można korzystać z niektórych Linq:

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

Można użyć String.IndexOfAny - będzie skanować ciąg dla dowolny z zestawu znaków w tablicy:

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

Czy ta wygrana jest najkrótsza?

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

Nie działa w języku C#. Ciąg typu nie zawiera definicji "ContainsAny" – Drkawashima

Powiązane problemy