此拋出要說源不能被鑄造到目的地的異常:C#鑄造INT浮動拋出異常(在運行時)
int a = 1;
object b = (object)a;
float c = (float)b; // Exception here
爲什麼?
此拋出要說源不能被鑄造到目的地的異常:C#鑄造INT浮動拋出異常(在運行時)
int a = 1;
object b = (object)a;
float c = (float)b; // Exception here
爲什麼?
您只能投盒裝結構的確切類型,所以你需要投下第一INT:
float c = (float)(int)b;
但是因爲有一個隱式轉換從int浮動,你可以這樣做:
float c = (int)b;
據我知道那是因爲你存儲箱「a」作爲一個int之後,你拆箱它作爲一個浮動,這不會工作...
得到它的權利,你應該做的浮法C =( float)(int)b;
您不能將一個數據類型的值從一種數據類型轉換爲另一種數據類型。您需要先將其恢復到原來的類型,然後將其拉出。或者,您可以使用Convert.To*
方法,例如
Object a = 6;
Double b = Convert.ToDouble(a);
鑄造具有不同的含義。在這種情況下,它意味着「unbox」,而不是「做數字轉換」。
看看6個含義在這裏:
的問題是,同樣的語法(從C的歷史問題),重複使用3個操作:
int a = 1; // Ok
object b = (object)a; // Ok. int is struct so we may box it into object
float c = (float)a; // Ok. Conversion from integer to float
float c = (float)b; // Error. object b is not boxed float
UL/OL對解析器很有趣,你需要在它們之間添加一些東西。在這種情況下,我使用了一個任意的虛假HTML標籤(如調用格式,但不會干擾帖子本身)。 – 2011-04-11 22:38:15
這個問題是問非常頻繁的SO。有關詳細信息,請參閱關於此主題的文章。
http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx
[Why \ [(int)(object)10m; \]確實拋出「指定的轉換無效」異常?](http://stackoverflow.com/questions/3953391/why-intobject10m-does-throw-specified-cast-is-not-valid-exception) – 2011-04-11 22:30:03