如何将A <t>类型的通用对象转换为A <t'>?</t'> </t>

时间:2015-01-15 11:25:38

标签: c# .net generics casting

我有MyClass<object>类型的对象,我需要将其转换为MyClass<int>,因为我知道它包含整数。

如果我只是尝试做演员是不编译:

MyClass<object> a = new MyClass<object>();
MyClass<int> b = (MyClass<int>) a;

错误怎么办?

2 个答案:

答案 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)

你不能,因为它们都不是另一个的超类。