Antologiko ha scritto:
Buongiorno, sto testando un metodo che prevede, tra gli altri, l'argomento value As Object che in certi
casi, che non sto a spiegare, è certamente di tipo numerico intero nullable sicuramente convertibile
nel tipo Long? (ossia Nullable(Of Long), come ad esempio Byte?, SByte? e Integer?).
[...]
Mi aiutate a capire perché l'ultima riga solleva un'eccezione?
Per iniziare, non è l'ultima riga che ti solleva una eccezione, bensì la penultima ovvero questa:
Dim n2 As Long? = CType(obj1, Long?)
La motivazione deriva dal fatto che puoi convertire un
Value Type di tipo
Integer (o
Int32) in un valore
Long, ma in quel caso stai convertendo un
oggetto (quindi un
Reference Type) tra due tipi che non hanno una radice comune.
In altri termini,
Nullable(of Long) e
Nullable(of Integer) sono due tipi entrambi specializzazione del tipo generico
Nullable.
Nella gerarchia di classi quindi, potresti considerarli "fratelli" tra di loro ma comunque non "padre/figlio", da qui l'impossibilità di eseguire la conversione.
Per esemplificare anche se in modo estremo e non del tutto corretto, è come se tu pretendessi di poter assegnare un istanza di
List(Of Long) a una variabile di tipo
List(Of Integer): quando parti da un tipo generico e lo "specializzi" andando a indicare i tipi specifici su cui deve basarsi, stai creando di fatto un nuovo tipo.
Ciao!