これを引き起こした状況は複雑ですが、私は問題を本質にまで切り詰めました。変数byte
に入れられる値があります。double
その後、変数に格納されobject
ます。このオブジェクト変数にアクセスできたら、バイトにキャストし直します。これが私の問題の短いコード例です:
byte originalValue = 23;
double valueAsDouble = originalValue;
// These work without issue
byte valueByte = (byte)valueAsDouble;
int valueInt = (int)valueAsDouble;
object valueObject = valueAsDouble;
// Both of these lines throw and InvalidCastException
int valueReconvertToInt = (int)valueObject;
byte valueReconvertToByte = (byte)valueObject;
私の質問には、私が推測する2つの部分があります。これが許可されないのはなぜですか?私が間違っていない限り、これobject
は単にラッパーであるdouble
ため、同じようにキャストできるはずではありませんか?
byte
私の2番目の質問は、そのような値をor int
(または通常は a からキャストできる他のデータ型) にキャストしたいときに使用できる一般的な回避策があるということですが、いくつかdouble
考えました。Convert.ChangeType()を使用し、 a を目的の型にキャストobject
する前に adouble
にキャストするか、または私が認識していない他のソリューションを使用するには、どれが最適でしょうか?