[英]Generic method does not know that the type has a specific method
这不会编译:
public ICollection<T> GetRelated<T>(Widget widget, IEnumerable<T> dbSet) where T : class
{
return dbSet.Where(x => x.WidgetId == widget.WidgetId).ToList();
}
红色的波浪状在x.WidgetId
,错误为
无法解析符号“ WidgetId”。
我将使用的所有类型都是具有WidgetId
属性的类,但是编译器并不知道。
我怀疑使此工作正常进行的唯一方法是创建一个基类或包含WidgetId
属性的接口(我们将其IMyBase
),让所有适当的类都派生自IMyBase
或实现它,然后更改此方法:
where T : class
对此:
where T : IMyBase
还有其他方法可以做到这一点吗? 还是这种情况是“那是接口的用途,所以请停止抱怨并开始编码”?
试试这个方法:
public interface IWidgetId
{
int WidgetId { get; }
}
public class Widget
{
}
public ICollection<T> GetRelated<T>(Widget widget, IEnumerable<T> dbSet) where T : IWidgetId
{
return dbSet.Where(x => x.WidgetId == widget.WidgetId).ToList();
}
使用Enumerable.OfType(TResult)
。
它将滤除非小部件,但将其余的小部件元素显示为小部件类型的元素。
return dbSet.OfType(Widget).Where(x => ……
但是,最好使GetRelated
方法仅在ICollection<T> where T: Widget
上起作用ICollection<T> where T: Widget
并使用其外部的OfType<Widget>
过滤器(即,管道中的早期版本)来设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.