c#泛型错误:方法的类型参数'T'的约束......?

时间:2012-08-07 12:26:25

标签: c#-4.0 generics entity-framework-4

收到以下错误:

  

错误1方法的类型参数“T”的约束   “genericstuff.Models.MyClass.GetCount<T>(string)”必须与类型
的约束相匹配   接口方法“T”的参数“genericstuff.IMyClass.GetCount<T>(string)”。考虑
  使用显式接口实现。

类别:

 public class MyClass : IMyClass
 {
     public int GetCount<T>(string filter)
     where T : class
       {
        NorthwindEntities db = new NorthwindEntities();
        return db.CreateObjectSet<T>().Where(filter).Count();
       }
 }

接口:

public interface IMyClass
{
    int GetCount<T>(string filter);
}

3 个答案:

答案 0 :(得分:23)

您正在将T generic参数限制为实现中的class。您的界面没有此约束。

您需要将其从类中删除或将其添加到您的界面以使代码编译:

由于您正在调用方法CreateObjectSet<T>()requires the class constraint,您需要将其添加到您的界面。

public interface IMyClass
{
    int GetCount<T>(string filter) where T : class;
}

答案 1 :(得分:3)

您还需要将约束应用于接口方法,或者将其从实现中删除。

您正在通过更改实施约束来更改接口合同 - 这是不允许的。

public interface IMyClass
{
    int GetCount<T>(string filter) where T : class;
}

答案 2 :(得分:1)

您也需要约束您的界面。

public interface IMyClass
{
    int GetCount<T>(string filter) where T : class;
}