2012-04-30 6 views
6

C#のINT-以下のコードは、最後の割り当てに失敗したオブジェクト・ツー・ダブルキャストエラー説明

static void Main(string[] args) 
{ 
    int a = 5; 
    object b = 5; 

    System.Diagnostics.Debug.Assert(a is int && b is int); 

    double x = (double)a; 
    double y = (double)b; 
} 

AとBの両方がintている場合は、このエラーの原因は何ですか?

+0

[ボックス化された値をキャスト]可能な複製(http://stackoverflow.com/questions/5312731/casting-a-boxed-value) – Brian

答えて

15

ボックス化解除は正確な型を必要とする - あなたの代わりにこれを行うことができます。

double y = (double)(int)b; 
+0

興味深い。ありがとう! – digdig

20

これは非常によく聞かれる質問です。説明については、http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspxを参照してください。


スニペット:

私はC#のキャスト演算子についての質問のかなりの数を取得します。私が得る最も頻繁な質問は次のとおりです:

short sss = 123; 
object ooo = sss;   // Box the short. 
int iii = (int) sss;   // Perfectly legal. 
int jjj = (int) (short) ooo; // Perfectly legal 
int kkk = (int) ooo;   // Invalid cast exception?! Why? 

なぜですか?ボックス化されたTTにのみアンボックスすることができます。 (*)一度アンボックスされると、それはいつものようにキャストできる単なる値なので、ダブルキャストはうまく動作します。 (*)またはNullable<T>

0

aintですが、bintであるオブジェクトへの参照です - それは箱入りint型と呼ばれるものです。それらは2つの異なるものであり、したがって異なる動作である。

1

暗黙のキャストはコンパイル時の操作です。 objectbでは不可能です。

関連する問題