Ho un semplice frammento di codice poco che mi è frustrante:Operatore condizionale C# non una dichiarazione?
HashSet<long> groupUIDs = new HashSet<long>();
groupUIDs.Add(uid)? unique++ : dupes++;
In fase di compilazione, si genera l'errore:
Only assignment, call, increment, decrement, and new object expressions can be used as a statement
HashSet.Add
è documentato per restituire un bool, in modo che il ternario (?) l'operatore dovrebbe funzionare, e questo sembra un modo completamente legittimo per tracciare il numero di elementi unici e duplicati che aggiungo a un hash-set.
Quando lo riformatto come if-then-else, funziona correttamente.
Qualcuno può spiegare l'errore e se c'è un modo per farlo come un semplice operatore ternario?
Preferisco invece lo statemnet. Il dummy assegna una variabile che alcune risposte suggeriscono aggiunge semplicemente confusione. –
Nota anche i ternari sono solitamente usati per scegliere un valore, non scegliere un'azione. Nel tuo caso stai scegliendo se incrementare uno dei due valori. Quindi è più sensato semantico utilizzare un if-else poiché si sta scegliendo un'azione. – AaronLS