将盒装 int64 转换为 int
Cast boxed int64 to int
在通用 class 方法中,我有以下代码:
System::Object^ ObjectValue;
// ...
T Value = (T)ObjectValue;
在运行时的某一时刻,我的 class 被 T
实例化为 int
并且 ObjectValue
包含 System::Int64
,但是强制转换操作在上面的代码中给了我一个System::InvalidCastException^
。我怎样才能使这个转换工作?
如果没有泛型,您遇到的问题也会发生:
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);
}
};
在通用 class 方法中,我有以下代码:
System::Object^ ObjectValue;
// ...
T Value = (T)ObjectValue;
在运行时的某一时刻,我的 class 被 T
实例化为 int
并且 ObjectValue
包含 System::Int64
,但是强制转换操作在上面的代码中给了我一个System::InvalidCastException^
。我怎样才能使这个转换工作?
如果没有泛型,您遇到的问题也会发生:
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);
}
};