Abbiamo creato la struttura Id32
e Id64
per includere interi e valori lunghi provenienti da DB, in modo che possano essere esplicitamente elaborati come ID da un convertitore Json (con convertitori personalizzati dedicati).Cast implicito di runtime dall'oggetto
Il problema è che si legge questi dati da un Dictionary<string, object>
che in realtà è un oggetto DataRow
-come dove la parte string
è il nome della colonna e la parte object
è il valore.
Così prima abbiamo avuto questo codice per leggere il valore:
int myVal = (int)row["COLUMN"]
vogliamo che questo codice per continuare a lavorare anche dopo queste modifiche.
Ma poiché row["COLUMN"]
è un object
(@ tempo di compilazione) il cast implicito ha esito negativo, anche se in realtà è un Id32
(@ run-time).
le seguenti opere, ovviamente:
int myVal = (Id32)row["COLUMN"]
ma c'è un po 'a modo per risolvere questo senza modificare il codice che legge il valore?
Questo è il codice struct:
public struct Id32
{
public readonly int Value;
public Id32(int id) { this.Value = id; }
public static implicit operator int(Id32 id) { return id.Value; }
public static implicit operator Id32(int id) { return new Id32(id); }
}
Vedere anche: http://stackoverflow.com/questions/1611083/will-the-c-sharp-compiler-perform-multiple-implicit-conversions-to-get-from-one –
Questa domanda riguarda le conversioni implicite non cast. Sebbene il cast sia coinvolto (hai un 'object' e deve essere lanciato su' int', possibilmente all'interno di una conversione implicita da 'object' definito su' Id32'). – binki