通用方法调用无法从类名转换为完整的类名

时间:2010-07-09 13:40:18

标签: c# generics

我有一个如下界面:

 public interface ISelectEntity
{
    List<T> GetFromDB<T, O>(O data);
}

我在StatusCodes类

中实现如下
List<StatusCodes> ISelectEntity.GetFromDB<StatusCodes, StatusCodesInputParameters>(StatusCodesInputParameters data)
    {
        return EntitiesClass.PopulateStatusCodes(EntitiesDAL.GetStatusCodes(data));
    }

但是我收到以下错误:

  

错误2参数'1':无法从'StatusCodesInputParameters'转换为'Namespace.StatusCodesInputParameters'

假设我的命名空间名为Namespace,那就是我收到的错误。所有这些都在这一个命名空间内。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

您无法更改派生类中的方法签名。您可以在接口上定义泛型参数,而不是在方法上执行:

public interface ISelectEntity<T, O>
{
    List<T> GetFromDB(O data);
}

示例显式实现可能如下所示:

public class Foo : ISelectEntity<StatusCodes, StatusCodesInputParameters>
{
    List<StatusCodes> ISelectEntity<StatusCodes, StatusCodesInputParameters>.GetFromDB(StatusCodesInputParameters data)
    {
        return EntitiesClass.PopulateStatusCodes(EntitiesDAL.GetStatusCodes(data));
    }
}

和示例隐式实现:

public class Foo : ISelectEntity<StatusCodes, StatusCodesInputParameters>
{
    public List<StatusCodes> GetFromDB(StatusCodesInputParameters data)
    {
        return EntitiesClass.PopulateStatusCodes(EntitiesDAL.GetStatusCodes(data));
    }
}