Quando abbiamo due strutture e una è implicitamente convertibile nell'altra, sembra che le versioni System.Nullable<>
dei due siano anche implicitamente convertibili. Ad esempio, se la struct A
ha una conversione implicita nella struct B
, quindi A?
converte anche in B?
."Covarianza" della struttura System.Nullable <>
Ecco un esempio:
struct MyNumber
{
public readonly int Inner;
public MyNumber(int i)
{
Inner = i;
}
public static implicit operator int(MyNumber n)
{
return n.Inner;
}
}
All'interno di un metodo:
MyNumber? nmn = new MyNumber(42);
int? covariantMagic = nmn; // works!
Nel linguaggio C# Specification Version 4.0 si legge che una conversione del genere deve esistere per "l'identità implicita predefinito e conversioni numeriche ".
Ma è sicuro assumere che funzionerà anche per le conversioni implicite definite dall'utente?
(Questa domanda potrebbe essere correlato a questo bug: http://connect.microsoft.com/VisualStudio/feedback/details/642227/)
Avete persino il tempo di guardare queste citazioni o di digitare semplicemente a mano? – Blindy
@Blindy: entrambi! Ho una copia cartacea delle specifiche sulla mia scrivania e ho copiato questa sezione digitando ... quindi qualsiasi refuso! –
Hmm, mi mancava la sezione 6.4.2 e avevo letto solo 6.1.4. Grazie. –