如何将 A<T> 类型的泛型对象转换为 A<T'>?
How to cast a generic object of type A<T> to A<T'>?
我有一个类型为 MyClass<object>
的对象,我需要将其转换为 MyClass<int>
,因为我知道它包含整数。
如果我只是尝试做强制转换是不编译的:
MyClass<object> a = new MyClass<object>();
MyClass<int> b = (MyClass<int>) a;
怎么了,怎么办?
您可以使用 implicit
转换运算符
class MyClass<T>
{
public static implicit operator MyClass<T>(MyClass<object> input)
{
return null;
}
}
然后转换有效
MyClass<object> a = new MyClass<object>();
MyClass<int> b = (MyClass<int>) a;
//you don't have to write cast type
MyClass<int> c = a;
尽管您仍然需要实施转换的确切细节。
编辑:如果您想显式调用 cast,只需将 implicit
关键字更改为 explicit
class MyClass<T>
{
public static explicit operator MyClass<T>(MyClass<object> input)
{
return null;
}
}
这意味着您仍然可以使用原始演员表,但这将变得无效
//will not compile now !
MyClass<object> a = new MyClass<object>();
MyClass<int> b = a;
你不能,因为两者都不是另一个的超类。
我有一个类型为 MyClass<object>
的对象,我需要将其转换为 MyClass<int>
,因为我知道它包含整数。
如果我只是尝试做强制转换是不编译的:
MyClass<object> a = new MyClass<object>();
MyClass<int> b = (MyClass<int>) a;
怎么了,怎么办?
您可以使用 implicit
转换运算符
class MyClass<T>
{
public static implicit operator MyClass<T>(MyClass<object> input)
{
return null;
}
}
然后转换有效
MyClass<object> a = new MyClass<object>();
MyClass<int> b = (MyClass<int>) a;
//you don't have to write cast type
MyClass<int> c = a;
尽管您仍然需要实施转换的确切细节。
编辑:如果您想显式调用 cast,只需将 implicit
关键字更改为 explicit
class MyClass<T>
{
public static explicit operator MyClass<T>(MyClass<object> input)
{
return null;
}
}
这意味着您仍然可以使用原始演员表,但这将变得无效
//will not compile now !
MyClass<object> a = new MyClass<object>();
MyClass<int> b = a;
你不能,因为两者都不是另一个的超类。