【发布时间】:2015-11-25 16:08:15
【问题描述】:
我有一个由许多集合组成的类,如下所示:
public virtual ICollection<C> CStuff { get; set; }
public virtual ICollection<D> DStuff { get; set; }
public virtual ICollection<E> EStuff { get; set; }
每种类型都实现一个通用接口。
public class C : IStuff {}
public class D : IStuff {}
public class E : IStuff {}
我想创建一个包含我班级中所有 IStuff 的集合,如下所示:
IEnumerable<IEnumerable<IStuff>> AllStuffCollections
{
get { /* how??? */ }
}
public IEnumerable<IStuff> AllStuff
{
get
{
foreach (IEnumerable<IStuff> stuffCollection in AllStuffCollections)
{
foreach (IStuff stuff in stuffCollection)
{
yield return stuff;
}
}
}
}
有什么方法可以在不显式添加每个集合的情况下完成此操作(反射可以)?如,我不想这样做:
IEnumerable<IEnumerable<IStuff>> AllStuffCollections
{
get
{
return new List<IEnumerable<IStuff>>()
{
CStuff.Cast<IStuff>,
DStuff.Cast<IStuff>,
EStuff.Cast<IStuff>
}
}
}
随着时间的推移,这个类最终会添加更多IStuff 的集合,我担心当它发生变化时我会忘记将它们包含在AllStuffCollections 中。
此外,集合本身是惰性的(EF 填充),所以我不想做任何会迫使立即“查询所有事情”发生的事情。
【问题讨论】:
-
您能否提供一个您做想要的示例(即使它无效)。我不确定您是否更愿意使用显式添加集合的反射,或者您是否只想让程序知道您以某种方式拥有三个集合。
-
@Mephy 不显式添加每个集合!
标签: c# reflection collections interface casting