Al hacer esto, usted está implícita boxeo del punto decimal d
a un objeto básico:
object o = d;
No se puede convertir valores en caja directamente sin primero desempaquetarlos, que es la razón por la cual el lanzamiento directo a un int, como en el siguiente, falla:
int x = (int)o;
Sin embargo, al hacer esto (fundición de forma intermedia a un primer decimal):
int x = (int)(decimal)o;
se intenta por primera unboxing o
, lo que significa que está trayendo el valor decimal, entonces conversión del valor decimal sin embalaje a un int, que funciona porque C# admite el lanzamiento de decimales a ints.
posible duplicado de [? Por qué no puedo desempacar un int como un decimal] (http://stackoverflow.com/questions/1085097/why-cant-i -unbox-an-int-as-a-decimal) – nawfal