Cosa sono gli operatori sollevati?

Stavo guardando questo articolo e sto lottando per seguire l’esempio VB.NET che spiega gli operatori sollevati. Non sembra esserci un esempio o un’esercitazione C # equivalente. Non ho molta esperienza con l’overloading dell’operatore in generale, quindi tentare di venire a patti con l’equivalente VB.NET durante la lettura su tipi nullable probabilmente non è il miglior punto di partenza …

Qualcuno sarebbe in grado di fornire una spiegazione degli operatori sollevati e di come vengono utilizzati dai tipi nullable? Significa solo che il tipo annullabile non sovraccarica di per sé gli operatori e utilizzerà gli operatori dal tipo sottostante che rappresenta?

Non sembrano esserci molte informazioni su SO degli operatori sollevati, quindi spero che questo possa aiutare anche altri.

Gli operatori sollevati sono operatori che lavorano su tipi annullabili “sollevando” gli operatori che già esistono nella forma non annullabile. Quindi per esempio, se lo fai:

int? x = 10; int? y = 10; int? z = x + y; 

Quell’operatore “+” è sollevato. In realtà non esiste su Nullable ma il compilatore C # funziona come se lo fosse, generando codice per fare la cosa giusta. (Per la maggior parte dei casi, si tratta di verificare se uno degli operandi è nullo, in caso affermativo, il risultato è nullo. Altrimenti, scartare entrambi gli operandi ai valori non annullabili, utilizzare l’operatore normale e quindi racchiudere il risultato in un valore nullable. Ci sono tuttavia alcuni casi speciali intorno ai confronti).

Vedere la sezione 6.4.2 (operatori di conversione sollevati) e 7.3.7 (operatori sollevati) della specifica C # per ulteriori informazioni.