我创建了这个通用方法
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;
答案 0 :(得分:3)
此错误消息的明显原因是Items
未实现IFields
。
换句话说,您的Items
类型需要包含此内容:
public class Items : IFields
^-----^
如果你没有这个,那么Items
不是GetByID<T>
方法的有效类型,因为它没有实现此接口。
即使Items
类型碰巧拥有合适的成员,也是如此。除非您明确声明这些成员也实现了界面,否则通过我上面展示的内容,这是不够的。因此,即使您的Items
类型具有id
属性,您仍然必须明确声明该类型实现了接口。