无法编译:
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
),并具有所有适当的类派生或实现这一点,然后进行更改:
where T : class
对此:
where T : IMyBase
还有其他方法可以做到这一点吗?还是这种情况是“那是接口的用途,所以请停止抱怨并开始编码”?
答案 0 :(得分:1)
尝试这种方法:
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();
}
答案 1 :(得分:-2)
它将过滤掉非小部件,但将其余的小部件元素显示为小部件类型的元素。
return dbSet.OfType(Widget).Where(x => ……
但是最好使GetRelated
方法仅在ICollection<T> where T: Widget
上起作用,并使用其外部的OfType<Widget>
过滤器(例如,在管道中的较早位置)进行设计。