Ответ Джона Скита охватывает причину; Что касается того, как обойти это, вот что вы должны сделать:
long l = 1;
object obj = (object)l;
double d = (double)(long)obj;
Причина двойного применения заключается в следующем; когда .NET распаковывает переменную, он знает только, как распаковать ее в тип, из которого она была упакована (long
в вашем примере.) После того, как вы распаковали ее и получили надлежащий long
примитив, вы можете затем привести это double
или любой другой тип, отлитый из long
.