我创建了这个通用方法
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);
出现以下编译错误。
类型“Items”不能用作泛型中的类型参数“T”
类型或方法
“DB.GetByID(System.Collections.Generic.IEnumerable,int)”。那里
没有从“Items”到“IFields”的隐式引用转换
我该如何解决这个问题?
实际上,我希望“在匿名类型中”使用 lambda 表达式。
此错误消息的明显原因是Items
不执行IFields
.
换句话说,你的Items
类型需要有这个:
public class Items : IFields
^-----^
如果你没有这个,那么Items
不是您的有效类型GetByID<T>
方法,因为它没有实现这个接口。
即使Items
类型恰好有正确的成员。除非您明确声明这些成员也实现了该接口,否则这还不够。所以即使你的Items
类型有id
属性,您仍然必须明确声明该类型实现了接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)