无法将派生类型隐式转换为基类泛型类型

时间:2016-12-07 09:22:53

标签: c#

以下代码未使用

编译
  

错误CS0029:无法将类型'CSConsoleTest.Derived'隐式转换为'T'。

是编译器错误还是原因?

public class Base
{
    public Derived Derived;
}
public class Derived : Base
{
}
class Program
{
    public static void Func<T>(T obj) where T : Base
    {
        obj = obj.Derived;
    }
}

1 个答案:

答案 0 :(得分:0)

T可以是从T派生的任何类,而不是总是基类。例如:

public class Derived1 : Base
{
}
public class Derived2 : Base
{
}

T可以是Derived1Derived2Base

你无法将Derived1强制转换为Derived2,这就是编译器拒绝隐式强制转换的原因。

obj = obj.Derived as T; // safe explicit cast.

除此之外,我不建议在基类中使用子类。如果你告诉你的想法,或许我们可以给你正确的道路。