C#のキャストに関する考察

C#のキャストで意外なエラーが発生しました。
————————-
object obj = (int)1;
var num = (UInt16)obj; // ERR! 指定されたキャストは有効ではありません。
————————-
正常に実行するにはは、
————————-
int obj = (int)1;
var num = Convert.ToInt16(obj);
————————-
か、
————————-
int obj = (int)1;
var num = (UInt16)(int)obj;
————————-
です。
intからUInt16へのキャストは簡単にできるのに、なぜ?
気になったので調べました。
まず、エラーの理由はobject型はIConvertibleインタフェースを実装していないので変換が必要なキャストは出来ません。
そこで、Convertクラスを直接呼ぶか、intにキャストしてIConvertibleインタフェースを使えるようにしてから、UInt16にキャストする必要があるようです。
C言語と同じ感覚でキャスト演算子を使用していますが、C#では実際の方以外への返還へはIConvertibleインタフェースで変換してるんですね。
小さなことですが、ちょっと面白い発見です。

Author: kachi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です