2013-02-06 20 views
8

Ich möchte überprüfen können, ob die Zeichenfolge alle in der Liste enthaltenen Werte enthält. So wird es Ihnen nur eine 'richtige Antwort' geben, wenn Sie alle 'Schlüsselwörter' aus der Liste in Ihrer Antwort haben. Heres etwas ich müde, die Hälfte scheitert (überprüft nicht für alle Arrays, wird nur eins akzeptieren). -Code ich müde:Überprüfen, ob die Zeichenfolge alle Eingaben in der Liste enthält

foreach (String s in KeyWords) 
     { 
      if (textBox1.Text.Contains(s)) 
      { 
       correct += 1; 
       MessageBox.Show("Correct!"); 
       LoadUp(); 
      } 
      else 
      { 
       incorrect += 1; 
       MessageBox.Show("Incorrect."); 
       LoadUp(); 
      } 
     } 

Grunde möchte ich, was zu tun ist:

Frage: Was ist die Definition der Psychologie?

Schlüsselwörter in Arraylist: Studie, mentalen Prozess, Verhalten, Menschen

Antwort: Psychologie ist die Studie von mentalen Prozess und Verhalten von Menschen

Jetzt wenn und nur wenn th Die obige Antwort enthält alle Schlüsselwörter. Mein Code akzeptiert die Antwort. Ich hoffe, ich war damit klar.

Bearbeiten: Vielen Dank für Ihre Hilfe. Alle Antworten wurden abgestimmt und ich danke allen für schnelle Antworten. Ich habe die Antwort gewählt, die leicht an jeden Code angepasst werden kann. :)

Antwort

13

Mit LINQ:

// case insensitive check to eliminate user input case differences 
var invariantText = textBox1.Text.ToUpperInvariant(); 
bool matches = KeyWords.All(kw => invariantText.Contains(kw.ToUpperInvariant())); 
2

Sie können wie einige der LINQ Methoden verwenden:

if(Keywords.All(k => textBox1.Text.Contains(k))) { 
    correct += 1; 
    MessageBox.Show("Correct"); 
} else { 
    incorrect -= 1; 
    MessageBox.Show("Incorrect"); 
} 

Die All Methode true zurück, wenn die Funktion für alle Elemente in der Liste true zurück.

2

Dies sollte helfen:

string text = "Psychology is the study of mental process and behaviour of humans"; 
bool containsAllKeyWords = KeyWords.All(text.Contains); 
Verwandte Themen