类型''不能用作类型参数' T'在泛型类型或方法中

时间:2016-11-23 10:32:20

标签: c# generics lambda

我创建了这个通用方法

public IEnumerable<T> GetByID<T>(IEnumerable<T> source, int id) where T : IFields
{
   return source.Where(x => x.id == id);
}

IFieds接口

public interface IFields
{
    string code { get; set; }
    int id { get; set; }
}

当我试图获得该值时,这显然不会编译

DB.GetByID(Helper.Database.Table<Items>(), 1);

出现以下编译错误。

  

类型&#34;项目&#34;不能用作类型参数&#34; T&#34;在通用   类型或方法   &#34; DB.GetByID(System.Collections.Generic.IEnumerable,int)&#34;。那里   没有隐含的参考转换来自&#34; Items&#34;到&#34; IFields&#34;

我该如何解决? 实际上,我希望在匿名类型&#34;中使用lambda表达式#34;

1 个答案:

答案 0 :(得分:3)

此错误消息的明显原因是Items未实现IFields

换句话说,您的Items类型需要包含此内容:

public class Items : IFields
                     ^-----^

如果你没有这个,那么Items不是GetByID<T>方法的有效类型,因为它没有实现此接口。

即使Items类型碰巧拥有合适的成员,也是如此。除非您明确声明这些成员也实现了界面,否则通过我上面展示的内容,这是不够的。因此,即使您的Items类型具有id属性,您仍然必须明确声明该类型实现了接口。