Si può fare:
someBool = (someStatement) ? true : someBool;
non credo che le fa guadagnare un sacco di chiarezza su:
if (someStatement)
{
someBool = true;
}
ma sembra davvero essere una questione di gusti. Non direi che sia chiaramente negativo, ma il primo non è comune, quindi probabilmente lo eviterei.
chiedete perché non è possibile utilizzare l'operatore in questo modo:
someBool = (someStatement) ? true : ;
questo sarebbe un cambiamento molto grande lingua! Tenete a mente che un incarico simile a questa:
<location> = <expression>;
L'espressione viene valutata per dare un certo valore, e tale valore viene memorizzato in posizione. (A seconda che la posizione sia una variabile, proprietà, campo o indicizzazione, l'operazione di "memorizzazione" potrebbe essere molto diversa.)
Qui stai proponendo che il valore dell'espressione a destra, oltre al suo normale valori, può essere un valore di "non modifica", che ha il comportamento speciale che quando lo si utilizza in un'istruzione di assegnazione, non si verifica alcuna operazione di archiviazione. È diverso da qualsiasi altro valore normale e potenzialmente sorprendente.Ma cosa significherebbe se lo usassi in altri posti?
// Does this call DoSomething when cond is false?
// If so, what value is passed to it?
someObject.DoSomething(cond?x:);
// What happens here if cond is false? Does it cancel
// the entire assignment?
int x = 77 + (cond?2:) * 3 - 4;
// If cond is false, are methods F1 and F2 called or not called?
int x = F1() + (cond?2:) + F2();
// What does this do? Does it skip the return if cond is false?
return (cond?2:);
penso che si può trovare estremamente difficile a venire con un comportamento sensibile, intuitiva e coerente per l'operatore in tutte queste circostanze, e non credo che sarebbe molto utile se non in una semplice assegnazione. Semplicemente non si adatta al resto della lingua, incluso renderebbe più difficile l'apprendimento, la lettura, la comprensione, l'implementazione e la spiegazione della lingua. Non ne vale la pena per un po 'di concisione.
Cosa ti aspetti dalle espressioni '(someStatement)? true: 'and' (someStatement)? vero? valutare? –
@ O.R.Mapper true se someStatement è true e immutato se someStatement è false (questa domanda è puramente ipotetica, non è un problema valido) –
Che cosa è * invariato *? L'espressione deve valutare un valore concreto, in questo caso, di tipo 'bool' - ovvero, 'true' o' false'. –