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

时间:2009-11-25 16:22:49

标签: generics interface

我正在尝试理解this

中描述的通用接口

我的示例有一个界面:

  public interface ITest<T> where T: class
  {
    T GetByID(int id);
  }

我有一个实现接口的类,使用LINQ来引入项目Data,其中包含类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;
      }

  }

这会产生一个错误,说“不能将类型'Data.myClass'隐式转换为'myClass',但是如果我将公共类Test&lt; myClass&gt;更改为公共类Test&lt; Data.myClass&gt;我得到”类型参数声明必须是一个标识符而不是类型“。

我显然错过了一些东西,因为我不明白这里发生了什么。任何人都可以解释它,或指向可以更好地解释它的地方吗?

感谢。

2 个答案:

答案 0 :(得分:2)

我认为您只想从Test类中删除泛型参数。

... class Test : ITest<myClass> ...

现在,通用参数名称是实际的类型名称。

答案 1 :(得分:0)

我怀疑问题在这里:

 _db.myClass.First...

你的意思是否可能是

_db.GetAll<myClass>().First...

我认为你将myClass作为一个类型与myClass混淆为函数_db实现了吗?