C# Fragen zu bool, switch und if

Mr Speicher

Neu angemeldet
Registriert
22 Dez. 2013
Beiträge
83
Hallo, wie die Überschrift schon sagt, habe ich zu folgenden drei Dingen eine.

Die erste Frage betrifft den Datentyp bool. Bool selber kann ja nur entweder true oder false sein.
Wie kann ich jetzt aber z.B. eine bestimmte Zahl, ein Buchstabe oder ein Wort festlegen das True ist und alles andere False. In meinen Büchern zu C# steht auch nur sehr wenig bis gar nichts zu bool, also nicht die Zuweisung wie ich sie suche.

Folgendes Beispiel habe ich erstellt, es wird ein Wert von der Tastatur eingelesen. Bei "J" wird der bool true, bei allem anderen false. Realisiert habe ich das Ganze mittels einer IF-Abfrage. Gibt es noch eine andere, kürzere Möglichkeit die Sache zu realsieren ? Eine direkte Zuweisung nach dem Motto bool antwort = "J" = true;
antwort= Console.Readline();

[src=csharp]
string eingabe;
bool antwort;

Console.WriteLine("Eingabe machen: ");
eingabe = Console.ReadLine();

if (eingabe == "j")
{
antwort = true;
}
else
{
antwort = false;
}
Console.WriteLine(antwort);[/src]

Die nächsten Frage betreffen if und switch.

Zunächst if, ist es nicht möglich in der Bedingung, auf mehrere Werte zu prüfen ?
Beispiel: Wir haben eine int zahl = 6; in der einer ersten if-Bedingung wäre es jetzt möglich zu prüfen ob die Zahl z.b. kleiner als 4 ist. if (zahl < 4) ....... ist es nun richtig, dass man in einer Bedingung aber z.B. nicht prüfen kann ob die Zahl größer 5 oder kleiner 10 ist ?
if (zahl >5 | < 10)...... führt dann zu dem Fehler ungültiger Ausdruck bei < 10. Selbst mit zwei Variablen die den Wert 5 und 10 enthalten ist es nicht möglich.

Beispielcode:
[src=csharp]
int zahl = 6;
int zahl2 = 5;
int zahl3= 10;

if (zahl < 4)
{
Console.WriteLine("Test test");
}
else if (zahl >5 | < 10)
{
Console.WriteLine("Test test");
}
else if (zahl > zahl2 | < zahl3)
{
Console.WriteLine("Test test");
}[/src]

Ähnliche Frage bei switch. Ist es richtig das in der Case-Bedingung eine Zahl nicht auf < oder > geprüft werden kann ?
Die Prüfung auf Zahl 5 funktioniert im Beispielcode, die anderen Varianten nicht, Fehler ungültiger Ausdruck für < >.

Beispielcode:
[src=csharp]
int zahl = 6;
int zahl1= 5;
int zahl2 = 10;


switch (zahl)
{
case 5:
Console.WriteLine("Test test");
break;

case >5:
Console.WriteLine("Test test");
break;

case >7 | < 10:
Console.WriteLine("Test test");
break;

case > zahl1 | < zahl2:
Console.WriteLine("Test test");
break;

}[/src]
 
Folgendes Beispiel habe ich erstellt, es wird ein Wert von der Tastatur eingelesen. Bei "J" wird der bool true, bei allem anderen false. Realisiert habe ich das Ganze mittels einer IF-Abfrage. Gibt es noch eine andere, kürzere Möglichkeit die Sache zu realsieren ? Eine direkte Zuweisung nach dem Motto bool antwort = "J" = true;
antwort= Console.Readline();

Die einfachste Variante wäre wohl:
[src=csharp]bool antwort = eingabe == "j";[/src]

Hier wird rechts der Ausdruck evaluiert und die Variable antwort auf das Ergebnis gesetzt.

Die nächsten Frage betreffen if und switch.

Zunächst if, ist es nicht möglich in der Bedingung, auf mehrere Werte zu prüfen ?
Beispiel: Wir haben eine int zahl = 6; in der einer ersten if-Bedingung wäre es jetzt möglich zu prüfen ob die Zahl z.b. kleiner als 4 ist. if (zahl < 4) ....... ist es nun richtig, dass man in einer Bedingung aber z.B. nicht prüfen kann ob die Zahl größer 5 oder kleiner 10 ist ?
if (zahl >5 | < 10)...... führt dann zu dem Fehler ungültiger Ausdruck bei < 10. Selbst mit zwei Variablen die den Wert 5 und 10 enthalten ist es nicht möglich.

Hier gehst du die Sache falsch an. Die Ausdrücke müssen einzeln parsebar sein, und der Ausdruck "< 10" ist nicht wahr oder falsch. Du kannst aber folgendes machen:

[src=csharp]if(zahl > 5 && zahl < 10)[/src]

Das && ist hier ein logisches Und; nur wenn links und rechts davon "true" steht, ist das Ergebnis true.

Du darfst hier nicht den Doppelstrich (||) verwenden; dieser entspricht dem logischen Oder. Das Ergebnis wäre immer true, da jede Zahl größer 5 oder kleiner 10 ist.

Ähnliche Frage bei switch. Ist es richtig das in der Case-Bedingung eine Zahl nicht auf < oder > geprüft werden kann ?
Die Prüfung auf Zahl 5 funktioniert im Beispielcode, die anderen Varianten nicht, Fehler ungültiger Ausdruck für < >.

Switch-Case ist nur dafür gedacht, auf bestimmte Fälle zu überprüfen. Du musst eine solche Überprüfung über if-else machen - du kannst aber einen solchen Code auch im default-Block des Switch-Statements schreiben. Zudem kannst du auch mehrere Fälle kombinieren.

[src=csharp]int zahl = 5;
switch(zahl) {
case 1: funktion1(); break;
case 2: funktion2(); break;
case 3:
case 4: funktion3oder4(); break;
default:
if(zahl < 10) tueDies();
else tueDas();
}
[/src]
 
  • Thread Starter Thread Starter
  • #3
Super, Danke für die ausführlichen Antworten. Habe ich wieder was gelernt.
 
Wobei noch zu erwähnen wäre das Switch / Case auch Aufzählungen und Bereiche kann

Case: 1,4,6,7

Case 5 to 10

>>> obiges Beispiel ist falsch, habe gerade festgestellt das geht in c# nicht - nur in VB.NET ;)

aber du kannst so etwas in c# verwenden:
[src=csharp]int c = 2;
if(Enumerable.Range(0,10).Contains(c))
DoThing();
else if(Enumerable.Range(11,20).Contains(c))
DoAnotherThing();[/src]

Oder:
[src=csharp]public static void MySwitchWithEnumerable(int switchcase, int startNumber, int endNumber, Action action)
{
if(Enumerable.Range(startNumber, endNumber).Contains(switchcase))
action();
}

MySwitchWithEnumerable(c, 0, 10, DoThing);
MySwitchWithEnumerable(c, 10, 20, DoAnotherThing);
[/src]
 
Aus meiner Sicht ist die Lesbarkeit des Codes immer wichtiger,als möglichst viel Code in eine Zeile zu packen.

Wenn mir einer aus dem Team ein tolleVariableMitSuperlangemNamen = irgendeineVariable[0]->getValueOfSomething(IRGENDEINEKONSTANTE) == this->irgendeineelendslangeFunktion(nochEineFunktion(123,bIDontKnow), Whatever); hinknallt,weigere ich mich, das zu Debuggen, wenn es dann später irgendwo ein Problem gibt.
 
Wenn sie dabei nicht zu sehr mit der Länge übertreiben, sind sprechende Namen eine tolle Sache.
 
Zurück
Oben