C# で数字を object 型にキャストした値型の扱いについて

次のようなコードを実行すると、どうなるだろうか。

double d = 1.23456;
int i = (int)d;
Console.WriteLine(i);

double 型を int 型にキャストしているだけだ。
これは問題なく動作する。

では、次のコードはどうだろうか。

double d = 1.23456;
object o = d;
int i = (int)o;
Console.WriteLine(i);

このコードは動作しない。

object 型から int へキャストした時点で
ハンドルされていない例外: System.InvalidCastException: 指定されたキャストは有効ではありません。
といった Exception がスローされる。

じゃー、一旦 object 型になってしまった、何らかの値の型を別な値の型に変換したいときはどうするかというと、Convert クラスを使う。
上の例でいうなら

int i = Convert.ToInt32(o);

とすることで変換できる。
なお、 object 型にする値は double 型でなくても、全ての値型で起る。