Generics C:“通用接口和理解”;类型参数声明必须是标识符,而不是类型;

Generics C:“通用接口和理解”;类型参数声明必须是标识符,而不是类型;,generics,interface,Generics,Interface,我试图理解中描述的通用接口 我的示例有一个接口: public interface ITest<T> where T: class { T GetByID(int id); } 公共接口测试,其中T:class { T GetByID(int-id); } 我有一个实现接口的类,在项目数据中使用LINQ to enties,其中包含类myClass: public class Test<myClass> : ITest<myClass&

我试图理解中描述的通用接口

我的示例有一个接口:

  public interface ITest<T> where T: class
  {
    T GetByID(int id);
  }
公共接口测试,其中T:class
{
T GetByID(int-id);
}
我有一个实现接口的类,在项目数据中使用LINQ to enties,其中包含类myClass:

  public class Test<myClass> :  ITest<myClass> where myClass : class
  {
      Data.myEntities _db = new Data.myEntities();

      public myClass GetByID(int id)
      {
        var item = _db.myClass.First(m => m.ID == id);
        return item;
      }

  }
公共类测试:ITest其中myClass:class
{
Data.myEntities _db=新数据.myEntities();
公共myClass GetByID(int id)
{
var item=_db.myClass.First(m=>m.ID==ID);
退货项目;
}
}
这会产生一个错误,说明“无法将类型'Data.myClass'隐式转换为'myClass',但如果将公共类测试更改为公共类测试,则会得到“类型参数声明必须是标识符而不是类型”

很明显,我遗漏了一些东西,因为我不明白这里发生了什么。有人能解释一下吗,或者指出一个可以更好解释的地方吗


谢谢。

我怀疑问题出在这里:

 _db.myClass.First...
你的意思可能是这样的吗

_db.GetAll<myClass>().First...
\u db.GetAll()。首先。。。

我认为您混淆了myClass是一种类型,而myClass是一种函数_dbimplements?

我认为您只想从测试类中删除泛型参数

... class Test : ITest<myClass> ...
…类测试:ITest。。。

现在,泛型参数名与实际类型名之间存在阴影。

如果我这样做,“where”会收到一个错误,指出“非泛型声明上不允许使用约束”“。哦,“where”位也可以删除。@chirs,你没抓住重点。还应删除类型约束。在本例中,您需要创建一个名为myClass的泛型参数。@bruno:我很确定我遗漏了一些东西,这就是为什么我问这个问题:)但在这一点上,我甚至不知道我遗漏了什么-我可以做您建议的更改,它是有效的,但我不理解其中的区别。不,该代码使用LINQ to Entites返回具有指定ID的myClass对象。因此,对于每个T,您都有一个Data.myEntities属性,您可能有一个接口?因为如果这样做,则GetByID必须是一个大的switch语句,才能根据typeof(myClass)调用正确的语句。