Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Bitte Erklärung zu (...) ? ... : ... [Antwort: bedingte Bewertung]
Merkur76
myCSharp.de - Member

Avatar #avatar-1711.gif


Dabei seit:
Beiträge: 104
Herkunft: Bayern

Themenstarter:

Bitte Erklärung zu (...) ? ... : ... [Antwort: bedingte Bewertung]

beantworten | zitieren | melden

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!
=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
private Nachricht | Beiträge des Benutzers
progger
myCSharp.de - Member

Avatar #avatar-2094.gif


Dabei seit:
Beiträge: 1.271
Herkunft: Nähe von München

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

?
=
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;
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4.207
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

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

www.goloroden.de
www.des-eisbaeren-blog.de
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

ä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))
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

@herbivore:
gute Demo.
private Nachricht | Beiträge des Benutzers
Merkur76
myCSharp.de - Member

Avatar #avatar-1711.gif


Dabei seit:
Beiträge: 104
Herkunft: Bayern

Themenstarter:

Vielen Dank!

beantworten | zitieren | melden

Vielen Dank euch ALLEN für die ausführlichen Erklärungen! =)

Gruß Merkur76
=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
private Nachricht | Beiträge des Benutzers