operatore Coalesce in C #?
-
29-09-2019 - |
Domanda
Credo che ricordo di aver visto qualcosa di simile al ? : ternario operator in C # che aveva solo due parti ad esso e sarebbe tornato il valore della variabile se non fosse nullo e un valore predefinito se lo fosse. Qualcosa di simile a questo:
tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";
In sostanza l'equivalente di questo:
tb_MyTextBox.Text = o.Member != null ? o.Member : "default";
Fa una cosa del genere esistono o ho appena immaginare di vedere da qualche parte?
Soluzione
Yup:
tb_myTextBox.Text = o.Member ?? "default";
http://msdn.microsoft.com/en -us / library / ms173224 (VS.80) aspx
Altri suggerimenti
Beh, non è proprio la stessa cosa come il operatore condizionale , ma io ti penso stai pensando di nullo operatore coalescenza (?? ). (Credo che hai detto che era "simile" :) Nota che "ternario" appena si riferisce al numero di operandi dell'operatore è -. Così, mentre l'operatore condizionale è un operatore ternario, il nulla coalescenza operatore è un operatore binario
Ci vuole ampiamente questa forma:
result = first ?? second;
Ecco second
sarà valutata solo se first
è nullo. Non deve essere l'obiettivo di un incarico -. Si potrebbe usare per valutare un argomento del metodo, ad esempio
Si noti che il primo operando ha di essere annullabile - ma il secondo no. Anche se ci sono alcuni dettagli specifici intorno conversioni, nel caso semplice il tipo di tutta l'espressione è il tipo del secondo operando. A causa di associatività, è possibile impilare usi dell'operatore ordinatamente troppo:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
Si noti come x
e y
sono annullabili, ma z
e result
non lo sono. Naturalmente, z
potrebbe essere annullabile, ma poi result
avrebbe dovuto essere troppo annullabile.
Fondamentalmente operandi sarà valutata nell'ordine in cui appaiono nel codice, con valutazione fermandosi quando trova un valore non nullo.
Oh, e anche se la è mostrato in termini di tipi di valore sopra, funziona con tipi di riferimento troppo (che sono sempre Null).
Funny avete usato "?? qualche operatore QUI ??", in quanto l'operatore che stai cercando è "??", cioè:.
tb_MyTextBox.Text = o.Member ?? "default";
Sì, si chiama l'operatore Null coalescenza: