public string Source
{
get
{
/*
if ( Source == null ){
return string . Empty;
} else {
return Source;
}
*/
return Source ?? string.Empty;
}
set
{
/*
if ( Source == null ) {
Source = string . Empty;
} else {
if ( Source == value ) {
Source = Source;
} else {
Source = value;
}
}
*/
Source == value ? Source : value ?? string.Empty;
RaisePropertyChanged ( "Source" );
}
}
Kann ich ?:
??
Operatoren GENAU als If / Else verwenden?
Meine Frage:
Wie schreibe ich folgendes mit ?: ?? Betreiber
[1]
if ( Source == null ){
// Return Nothing
} else {
return Source;
}
[2]
if ( Source == value ){
// Do Nothing
} else {
Source = value;
RaisePropertyChanged ( "Source" );
}
Kurz gesagt : Wie kann man nichts tun, nichts zurückgeben und mehrere Anweisungen mit dem ?:
??
Bediener ausführen?
c#
ternary-operator
Ahmed Ghoneim
quelle
quelle
Antworten:
Für [1] können Sie nicht: Diese Operatoren geben einen Wert zurück und führen keine Operationen aus.
Der Ausdruck
wertet aus,
b
oba
wahr ist, und bewertet,c
oba
falsch ist.Der Ausdruck
wertet aus,
b
wennb
nicht null ist, und wertet aus,c
wennb
es null ist.Wenn du schreibst
oder
Sie werden immer etwas zurückgeben.
Für [2] können Sie eine Funktion schreiben, die den richtigen Wert zurückgibt, der Ihre "Mehrfachoperationen" ausführt, aber das ist wahrscheinlich schlimmer als nur die Verwendung
if/else
.quelle
Der ternäre Operator (
?:
) ist nicht für den Kontrollfluss ausgelegt , sondern nur für die bedingte Zuweisung . Wenn Sie den Ablauf Ihres Programms steuern müssen, verwenden Sie eine Steuerungsstruktur wieif
/else
.quelle
?:
per se. Aber ich habe ein großes Problem damit, dass sie für den Kontrollfluss und insbesondere für den verschachtelten Kontrollfluss verwendet werden!Bezugnehmend auf ?: Operator (C # -Referenz)
Bezugnehmend auf ?? Operator (C # -Referenz)
Das bedeutet:
[Teil 1]
[Teil 2] ist nicht anwendbar ...
quelle
Das "nichts tun" funktioniert nicht wirklich für?
Wenn mit // Return Nothing gemeint ist, dass return null ist, dann schreibe
Wenn Sie meinen, ignorieren Sie den Codepfad und schreiben Sie
Und zum letzten
quelle
Der ternäre Operator gibt einen von zwei Werten zurück. Oder es kann eine von zwei Anweisungen basierend auf seinem Zustand ausführen, aber das ist im Allgemeinen keine gute Idee, da es zu unbeabsichtigten Nebenwirkungen führen kann.
In diesem Fall macht das () nichts, während baz etwas macht. Aber Sie haben den Code nur weniger klar gemacht. Ich würde mich für ausführlicheren Code entscheiden, der klarer und einfacher zu warten ist.
Darüber hinaus macht dies überhaupt wenig Sinn:
da () keinen Rückgabetyp hat (es ist ungültig) und baz einen Rückgabetyp hat, der zum Zeitpunkt des Aufrufs in diesem Beispiel unbekannt ist. Wenn sie nicht einverstanden sind, wird sich der Compiler lautstark beschweren.
quelle
Wenn Sie sich mit der Ausführlichkeit Ihres Codes befassen, würde ich dies schreiben, anstatt zu versuchen, Ausdrücke zu missbrauchen.
quelle
das?: ist der Reiseroutenbetreiber. (glaube, ich habe das richtig geschrieben) und es ist einfach zu bedienen. wie in einem booleschen Prädikat? iftrue: ifalse; Aber Sie müssen einen rWert / lWert wie in rWert = Prädikat haben? iftrue: iffalse;
Ex
int i = x < 7 ? x : 7;
Wenn x kleiner als 7 wäre, würde mir x zugewiesen werden, wenn nicht, wäre ich 7.
Sie können es auch in einer Rückgabe verwenden, wie in
return x < 7 ? x : 7;
wie oben hätte dies wiederum den gleichen Effekt.
so,
Source = Source == value ? Source : string.Empty;
glaube ich , ist das, was Ihr zu acheive versuchen.quelle
Der
?:
Operator gibt abhängig vom Wert eines Booleschen Ausdrucks einen von zwei Werten zurück.Hier finden Sie weitere Informationen zum
?:
Operator, auch als ternärer Operator bekannt:quelle
Ich glaube nicht, dass Sie ein Operator sein können und davon ausgehen, dass Sie den einen oder anderen zurückgeben. Es ist nicht, wenn sonst die Anweisung ersetzt wird, obwohl sie in bestimmten Fällen dafür verwendet werden kann.
quelle