我有MyClass<object>
类型的对象,我需要将其转换为MyClass<int>
,因为我知道它包含整数。
如果我只是尝试做演员是不编译:
MyClass<object> a = new MyClass<object>();
MyClass<int> b = (MyClass<int>) a;
错误怎么办?
答案 0 :(得分:4)
您可以使用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;
虽然你仍然需要实现转换的确切细节。
编辑:如果您想明确地调用强制转换,只需将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;
答案 1 :(得分:3)
你不能,因为它们都不是另一个的超类。