Quando si esegue questa operazione, si sta implicitamente boxe decimale d
a un oggetto di base:
object o = d;
Non puoi lanciare valori incasellati direttamente senza prima li unboxing, ecco perché il casting diretto su un int, come nel seguente, fallisce:
int x = (int)o;
Tuttavia, in questo modo (intermedia colata ad un primo decimale):
int x = (int)(decimal)o;
Sei primo unboxing o
, il che significa che si sta recuperando il valore decimale, quindi casting del valore decimale unboxed a un int, che funziona perché C# supporta il cast dei decimali in pollici.
possibile duplicato di [? Perché non posso unboxing un int come decimale] (http://stackoverflow.com/questions/1085097/why-cant-i -unbox-an-int-as-a-decimal) – nawfal