Laden...

if-schleife mit vielen String-Bedingungen abkürzen...

Erstellt von dinazavric vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.503 Views
Thema geschlossen
D
dinazavric Themenstarter:in
40 Beiträge seit 2011
vor 13 Jahren
if-schleife mit vielen String-Bedingungen abkürzen...

Hallo,

ich bin ein Anfänger was C# betrifft. Ich zeige hier mal ein Beispiel, wo ich mein Problem zeige =)

if ((TextBox1.Text == "p1")||
    (TextBox1.Text == "p2")||
    (TextBox1.Text == "p3")||
    (TextBox1.Text == "p4")||
    (TextBox1.Text == "p5")|| ....)
{
   toolStripStatusLabel1.Text = "OK";
}

else 
{
   toolStripStatusLabel1.Text = "not OK";
}

Meine Frage ist: Wenn man viel zu viele Bedingungen hat (z.B. 100), die auch total unterschiedlich sein können und alles andere ausgeschlossen sein soll, gibt es eine Methode wie man es Abkürzen kann?

Vielen Dank!

W
123 Beiträge seit 2008
vor 13 Jahren

Falls es nur Strings sind, kannst du alle in einen großen String packen und dann kann man mit einem Vergleich das Vorhandensein testen:


string str = "p1:p2:p3:p4:p5:p6"; // garantiert nicht vorkommendes Trennzeichen verwenden

if( str.indexOf(TextBox1.Text) != (-1) )
{
    // OK
}
else
{
    // NOK
}

Gruß
wolpertinger

D
dinazavric Themenstarter:in
40 Beiträge seit 2011
vor 13 Jahren

Super! Genau das habe ich gesucht. Danke wolpertinger 🙂

5.742 Beiträge seit 2007
vor 13 Jahren

Meine Frage ist: Wenn man viel zu viele Bedingungen hat (z.B. 100), die auch total unterschiedlich sein können und alles andere ausgeschlossen sein soll, gibt es eine Methode wie man es Abkürzen kann?

Da könnte man evtl. auch ein Array bzw. eine List<string> zurate ziehen. Diese könnte man dann sogar aus einer XML-Datei beziehen (gerade sinnvoll im Zusammenhang mit Validierung).

Evtl. bietet sich auch Regex an.

if-schleife AHHHHHHHH 😉

D
dinazavric Themenstarter:in
40 Beiträge seit 2011
vor 13 Jahren


>

Danke! Ja, If-Abfrage! Gut zu wissen... Wie ich schon sagte - bin ein Anfänger 😉

309 Beiträge seit 2008
vor 13 Jahren

Falls es nur Strings sind, ...

Den code halte ich für suboptimal, man erkennt erst auf den 2 und 3. Blick was gemeint ist, wenn die Strings wirklich so aufgebaut sind wie im ersten Post, dann Regex:


 if (Regex.IsMatch(@"^p\d+$", TextBox1.Text)
{
 // OK
} 
else
{
// Nicht OK
}

oder wenn die Bedingungen nichts miteinander zu tun haben bietet sich switch an


switch (TextBox1.Text)
{
     case ("ein string"):
     case ("noch ein string"):
     // usw.
          MessageBox.Show("OK");
          break;
    default:
         MessageBox.Show("Nicht OK");
         break;
}
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

Hinweis von herbivore vor 13 Jahren

Wenn es darum geht p1, p2, p3 ... bis p100 zu erkennen, dann ist vermutlich wirklich Regex am angebrachtesten. Die Lösung von wolpertinger hat zudem den Nachteil, dass auch jeder Teilstring als Treffer erkannt werden würde (wenn TextBox1.Text nur "p" enthält, würde trotzdem der OK-Fall ausgeführt).

Siehe auch Elegante Lösung für If Abfrage einer Variable auf mehrere zulässige Werte.

Aber wie dem auch alles sei. Das fällt unter Grundlagen, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

Mir ist schon klar, dass man nicht einfach ein Buch aufschlagen kann, und dann steht da, wie man diese if-Bedingung vereinfacht. Aber man muss als Anfänger auch nicht gleich alles von Anfang an perfekt lösen. Wenn man nach und nach mehr Wissen über Programmierung ansammelt, wird man irgendwann solche Bedingungen von alleine vereinfachen können. Insofern müssen wir die Frage hier auch nicht abschließend klären.

Und selbst bei alle Mühe, es von Anfang an richtig zu machen: Es wird wohl keinen Programmierer geben, der nicht die Hände über dem Kopf zusammenschlagen wird, wenn er nochmal einen Blick in seine allerersten Programme wirft.

Thema geschlossen