Domanda

Durante la sperimentazione con gli operatori di Coalesce Ternary e Null in C# ho scoperto che è possibile utilizzare incarichi sul lato destro delle espressioni, ad esempio questo è un codice C# valido:

int? a = null;
int? b = null;
int? c = a ?? (b = 12);
int? d = a == 12 ? a : (b = 15);

Stranamente, non solo l'incarico sul lato destro dell'espressione viene valutato sul proprio lato destro (il che significa che la terza riga qui è valutata 12 E non a qualcosa di simile b = 12 => void), ma anche questo incarico funziona efficacemente, in modo che due variabili siano assegnate in una dichiarazione. Si può anche usare qualsiasi espressione calcolabile sul lato destro di questo incarico, con qualsiasi variabile disponibile.

Questo comportamento mi sembra molto strano. Ricordo di aver avuto problemi con if (a = 2) invece di if (a == 2) Confronto in C ++, che viene sempre valutato a true E questo è un errore comune dopo essere passato da Basic/Haskell a C ++.

È una funzione documentata? C'è qualche nome per questo?

È stato utile?

Soluzione

Questo accade come conseguenza del operatore di assegnazione restituendo anche il valore:

L'operatore di assegnazione (=) memorizza il valore del proprio operando a destra nella posizione di archiviazione, proprietà o indicizzatore indicato dal suo operando a sinistra e restituisce il valore come risultato.

L'espressione b = 12 non solo assegna 12 a b, ma restituisce anche questo valore.

Altri suggerimenti

Assegnazione multipla funziona in C#:

int a;
int b;
int c;
a = b = c = 5;
//all variables = 5;

if(6 == (c = 6)){
   //this will be true;
}

Se si inserisce una variabile sul lato destro di un'equazione, anche se è stato appena assegnato un valore stesso sulla stessa riga, restituisce il suo valore/riferimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top