繁体   English   中英

泛型方法不知道类型具有特定方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM