Hallo!
Kann mir jemand bitte mal den Sinn dieser Zeile erklären (bzgl. (), ?, : );
legend.Mode = (m_ShowLegendCheck.Checked) ? LegendMode.Automatic : LegendMode.Disabled;
Ist das sowas wie die Kurzform für eine If-Abfrage?
z.B.
if (m_ShowLegendCheck.Checked)
{
LegendMode.Automatic;
}
else
{
LegendMode.Disabled;
}
Falls dem so ist, wann sollte man diese Kurzform verwenden?
Bzw. was ist der Vorteil von diesem (ausser dem weniger Tippen)?
Vielen Dank im Voraus!
Hallo Merkur76,
Ich kann dir nur eine Antwort auf die erste Frage geben: Ja, du hast es richtig erkannt. Wenn der Wert vor dem Fragezeichen true ergibt, wird der Wert/die Anweisung links von dem Doppelpunkt benutzt, anderenfalls die rechte.
Gruß progger
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Hallo Merkur76,
das ist eine bedingte Bewertung, also quasi ein if innerhalb eines Ausdrucks. Also keine Kurzform, ist schon auch ein bisschen was anderes. Ein if schreibt man (vereinfacht gesagt) außen um Ausdrücke rum, eine bedingte Bewertung schreibt man in einen Ausdruck.
herbivore
Ternärer Operator(3 Operanden), Erbe von C "bedingter Ausdruck/ conditional Expression", hat die 2. niedrigste Priorität.
"?" ist deutlich kürzer als die alternative Schreibweise.
value = bExpression ? a : b
Schont die Finger, kann bei Verschachtelung allerdings unübersichtlich werden.
alternative Schreibe ist:
if(bExpression)
value = a;
else
value = b;
Und im Gegensatz zu IIF in VB.Net wird auch nur der True oder der FalsePart evaluiert...
int a=2;
int b=1;
int c=a-b-b;
int d=0;
try
{
d=c >0 ? a/c : 0;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
MessageBox.Show(d.ToString());
c ist ja 0 also soll 0 zurückgegeben werden... in C# funzt dies perfekt.
Bei VB kracht es, da a \ c evaluiert wird obwohl ja der Wert aus dem False-Part gezogen werden sollte.
Dim a As Integer = 2
Dim b As Integer = 1
Dim c As Integer = a - b - b
Dim d As Integer = 0
Try
d = CType(IIf(c > 0, a \ c, 0), Integer)
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
End Try
MessageBox.Show(d.ToString())
PS: Bitte keine Kommentare über VB in diesem Thread 🙂 mein Post war rein sachlich gemeint 🙂
Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Wann man ❔ benutzen sollte? IMHO gar nicht, da es nicht zur Übersichtlichkeit beiträgt, sondern den Quellcode kryptischer und schlechter lesbar macht.
IMHO ein (unnötiges) Überbleibsel aus der C++-Welt.
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
älter: C,
auch Sache der Quellcodeformatierung( manchmal doch Übersichtlicher als verschachtelten if-else-if-else-if). Nicht notwendig, manchmal ok(sollte nicht die Regel werden, die Kunst liegt in der selektiven Anwendung(selten))
Hallo Der Eisbär,
also ich benutze die bedingte Bewertung sehr selten, aber wenn ich sie benutze, finde ich es immer sehr praktisch und leichter lesbar.
Ich sehe sie jedenfalls als aktiven Teil der Sprache an.
Statt
i = (i > 0) ? i - 1 : i + 1
würde ich auch eher schreiben:
if (i > 0) {
--i;
} else {
++i;
}
Aber in
Console.WriteLine ("{0} {1} {2}", obj1 != null ? obj1.ToString () : "<null>",
obj2 != null ? obj2.ToString () : "<null>",
obj3 != null ? obj3.ToString () : "<null>");
finde ich bedingte Bewertung schon sehr praktisch.
herbivore
@herbivore:
gute Demo.
Vielen Dank euch ALLEN für die ausführlichen Erklärungen! =)
Gruß Merkur76