2017-08-07 83 views
1

泛型類的方法,我有以下代碼:演員盒裝的Int64爲int

System::Object^ ObjectValue; 
// ... 
T Value = (T)ObjectValue; 

在運行期間一個點上,我的類實例化與TintObjectValue包含System::Int64,但在上面的代碼中施放操作會給我一個System::InvalidCastException^。我怎樣才能做這個演員的工作?

回答

2

您有會發生沒有泛型的問題:

Int64 x64 = 1; 
Object^ boxed64 = x64; 
int x32 = (int)boxed64; // InvalidCastException 

要解決投一次,拆箱,然後再轉換:

int x32 = (int)(Int64)boxed64; // works 

使用Convert.ChangeType從一個未知的盒裝投類型:

int x = (int)Convert::ChangeType(obj, int::typeid); 

對於仿製藥:

generic <typename T> 
public ref class Foo 
{ 
public: 
    void Bar(Object^ obj) 
    { 
     T x = (T)Convert::ChangeType(obj, T::typeid); 
    } 
};