无法返回约束泛型的具体实现

时间:2018-04-19 09:18:33

标签: c# generics

我对仿制药有一些问题,我没有看到我的错误。

鉴于此代码:

public interface IMyInterface { }

public class MyImplementation : IMyInterface { }

public interface IMyFactory<T> where T : class, IMyInterface
{
    T Create();
}

public class MyFactory<T> : IMyFactory<T> where T : class, IMyInterface
{
    public T Create()
    {
        // Complex logic here to determine what i would like to give back
        return new MyImplementation(); // <--- red squigglies - Cannot implicitly convert type 'ConsoleApp18.MyImplementation' to 'T'
    }
}

如果我像return new MyImplementation() as T;一样使用它,它就可以了。不再存在错误。

如果我像return (T)new MyImplementation();那样使用它,我会得到一个代码建议,以删除不必要的演员表。 (是的,这也是我的想法,为什么不能返回具体的实现,因为它与T兼容?)​​并且第一个错误(不能隐式转换...)仍然存在。

那么为什么我会收到此错误以及返回具体实现的正确实现是什么?

1 个答案:

答案 0 :(得分:1)

  

我在仿制药方面遇到了一些问题,而且我没有看到我的错误。

你的错误是使用泛型。鉴于您展示的代码,您根本不需要它们。工厂应该返回IMyInterface而不是T

public interface IMyFactory
{
    IMyInterface Create();
}

public class MyFactory : IMyFactory
{
    public IMyInterface Create()
    {
        // Complex logic here to determine what i would like to give back
        return new MyImplementation();
    }
}