【发布时间】:2016-11-23 10:32:19
【问题描述】:
我已经创建了这个通用方法
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? -
@LasseV.Karlsen 实际上没有先生
-
那你预计会发生什么?您特别说
T必须实现该接口,然后您尝试传入一个没有实现的类型。我可以发布一个简单的答案,告诉您为什么会收到该错误消息,但我怀疑这并不能真正帮助您。请告诉我们更多关于您添加约束的原因以及在传入未实现它的类型时为什么/预期会发生什么,也许我们可以帮助您在这里做正确的事情,而不仅仅是说“这就是为什么不会”没用”。 -
我想您应该将其发布为答案先生。我是这方面的新手。问题解决了。谢谢