我有Class
B,C和D继承自接口IA
。现在我已经IQueryable<B>
,IQueryable<C>
和IQueryable<D>
需要一种方法来处理IA
中某些属性的内容。
public IQueryable<T> DoStuff<T>(IQueryable<IA> samples) where T: IA{
// something that filters samples. Ommited
return samples.Select(s => (T)s).AsQueryable(); // works
//return (IQueryable<T>)samples; //InvalidCastException
}
var samples; // samples can be IQueryable<B>, IQueryable<C>, or IQueryable<D>
samples = DoStuff(samples);
两个问题:
IQueryable<T>
进行投射?它在循环和逐个投射时确实投射了。A
。那是行不通的,因为我无法将一个班级从A转为B,C,D。然后我将A
改为IA
。但是,我读过一些人说,当你需要为其具体实现抛弃一个接口时,你就会遇到设计问题。我需要避免在这里丢弃吗?如果是这样,那么实现目标的好方法是什么?