Uno degli operatori di C# è il cosiddetto operatore ternario ?:, detto anche operatore condizionale, che permette di restituire una fra due espressioni, a seconda che una condizione risulti vera o falsa.
In pratica esso permette di abbreviare un costrutto if/else (il prossimo
capitolo) utilizzando una sola istruzione.
Per esempio il seguente spezzone di codice:
if(condition) return expr1; else return expr2;
Può essere scritta utilizzando l’operatore ternario con la seguente sintassi :
condition ? expr1 : expr2
A partire da C# 7.2 è possibile utilizzare l’operatore ternario in una nuova modalità, chiamata ref conditional, che restituisce un riferimento al suo risultato, cioè a una delle due espressioni.
La sintassi generale è la seguente:
condition ? ref expr1 : ref expr2
Come per l’operatore ternario originale, viene valutata solo una delle due espressioni, expr1 oppure expr2, ed esse devono essere dello stesso tipo.
Il seguente esempio mostra come un valore restituito dall’operatore, preso da uno di due array, viene poi modificato riflettendosi sull’array originale.
var smallArray = new int[] { 1, 2, 3, 4, 5 }; var largeArray = new int[] { 10, 20, 30, 40, 50 }; int index = 7; ref int refValue = ref ((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]); refValue = 0; //la modifica si riflette anche all’interno dell’array largeArray Console.WriteLine(string.Join(" ", largeArray)); // Output: 10 20 0 40 50
essendo index = 7, l’operatore ternario restituisce la seconda espressione, cioè l’elemento all’indice (index-5= 2) del largeArray.
il valore viene memorizzato nella variabile refValue, e assegnando un valore 0 ad essa, tale operazione si riflette sull’array, che infatti una volta stampato, conterrà il valore 0, all’indice 2.
Questo e tutti gli argomenti introdotti dalle versioni intermedie C# 7.x sono trattati all’interno di Programmare con C# 8 guida completa.