myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Karte / Anleitung dazu
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
   » visual studio one
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity

» Anzeigen
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Bitte Erklärung zu (...) ? ... : ... [Antwort: bedingte Bewertung]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Merkur76 Merkur76 ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-1711.gif

Dabei seit: 01.07.2005
Beiträge: 104
Entwicklungsumgebung: VS 2005
Herkunft: Bayern


Merkur76 ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Kann mir jemand bitte mal den Sinn dieser Zeile erklären (bzgl. (), ?, : );

C#-Code:
legend.Mode = (m_ShowLegendCheck.Checked) ? LegendMode.Automatic : LegendMode.Disabled;

Ist das sowas wie die Kurzform für eine If-Abfrage?

z.B.

C#-Code:
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!
29.08.2005 18:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
progger progger ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2094.gif

Dabei seit: 05.08.2005
Beiträge: 1.271
Entwicklungsumgebung: Visual Studio 2005; #develop 2
Herkunft: Nähe von München


progger ist offline Blog von progger

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
29.08.2005 18:23 E-Mail | Website | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif

Dabei seit: 11.01.2005
Beiträge: 42.184
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
29.08.2005 18:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ikaros
myCSharp.de-Mitglied

Dabei seit: 27.05.2005
Beiträge: 1.697


ikaros ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

?
=
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;
29.08.2005 19:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1651.gif

Dabei seit: 05.04.2005
Beiträge: 3.696
Entwicklungsumgebung: VS 2003 Prof. / VS 2008 Prof.
Herkunft: Zentralschweiz


Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und im Gegensatz zu IIF in VB.Net wird auch nur der True oder der FalsePart evaluiert...

C#-Code:
            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.

C#-Code:
        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
29.08.2005 19:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2167.png

Dabei seit: 04.10.2003
Beiträge: 4.194
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl


Golo Roden ist offline Blog von Golo Roden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
29.08.2005 20:51 E-Mail | Website | Beiträge des Benutzers | zu Buddylist hinzufügen
ikaros
myCSharp.de-Mitglied

Dabei seit: 27.05.2005
Beiträge: 1.697


ikaros ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ä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))
29.08.2005 20:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif

Dabei seit: 11.01.2005
Beiträge: 42.184
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
i = (i > 0) ? i - 1 : i + 1

würde ich auch eher schreiben:

C#-Code:
if (i > 0) {
   --i;
} else {
   ++i;
}

Aber in

C#-Code:
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
29.08.2005 21:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ikaros
myCSharp.de-Mitglied

Dabei seit: 27.05.2005
Beiträge: 1.697


ikaros ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@herbivore:
gute Demo.
29.08.2005 21:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Merkur76 Merkur76 ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-1711.gif

Dabei seit: 01.07.2005
Beiträge: 104
Entwicklungsumgebung: VS 2005
Herkunft: Bayern

Themenstarter Thema begonnen von Merkur76

Merkur76 ist offline

Vielen Dank!

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank euch ALLEN für die ausführlichen Erklärungen! fröhlich

Gruß Merkur76
29.08.2005 22:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Jahre.
Der letzte Beitrag ist älter als 5 Jahre.
Antwort erstellen


© Copyright 2003-2010 myCSharp.de-Team. Alle Rechte vorbehalten. 03.09.2010 03:14