C#从方法返回泛型类

时间:2017-02-22 23:56:48

标签: c# generics

以下是我的代码,其中包含不重要的部分:

public class Response<T>
{
    //...
}

public class Summary
{
    //...
}

public class Db : IDb
{
    public Response<Summary> Generate()
    {
        //...
        return new Response<Summary>
        {
            //...
        };
    }

    public Response<Summary> Execute<Summary>()
    {
        return Generate();
    }
}

我收到一条错误消息:     Cannot implicitly convert type Response<Service.Models.Summary> to Response<Summary>.

我使用泛型错了吗?基本上,我期望在调用方法Generate()时看到Response模型,在这个实例中T是Summary类。

我实施的界面是:

public interface IDb
{
    Response<T> Execute<T>();
}

1 个答案:

答案 0 :(得分:3)

您的方法public Response<Summary> Execute<Summary>()的通用参数Summary覆盖了Summary的类定义。 Response<Summary>Execute<Summary>()的返回类型与Generate()中的返回类型不同。

您的代码似乎应该是:

public Response<Summary> Generate()
{
    //...
    return new Response<Summary>
    {
        //...
    };
}

public Response<Summary> Execute()
{
    return Generate();
}

如果添加了您的界面IDb,则上述答案无效。

您必须将Execute实施为public Response<T> Execute<T>(),这意味着返回类型Response<T> Response<Summary>相同编译时即可。所以错误是正确的。

你现在基本上有设计缺陷。

您可能需要进行此更改:

public class Db : IDb<Summary>
{
    public Response<Summary> Generate()
    {
        //...
        return new Response<Summary>
        {
            //...
        };
    }

    public Response<Summary> Execute()
    {
        return Generate();
    }
}

public interface IDb<T>
{
    Response<T> Execute();
}