假设我的数据库中有2个类:Class FooBar和Class BarFoo。我对我的数据库执行查询,返回类FooBos,其中包含一个FooBar列表但列表可以包含BarFoo的实例(不要问我为什么,这是我如何得到数据库而我可以'编辑它)。
无论如何要构建我的Domain对象,我会检查哪个类使用以下代码
if(FooBos.FooBars.OfType<BarFoo>().Count() != 0)
//Do things for FooBar here
else
//Do Things for BarFoo here
所以问题是在OfType之后整个列表属于Type BarFoo,我似乎无法弄清楚原因。
任何人都知道为什么会这样?
答案 0 :(得分:1)
通常,只要存在继承关系,就会使用OfType<>
。在你的情况下,我怀疑FooBar是BarFoo的孩子。
如果是这种情况,则表示列表中的所有对象都是继承BarFoo,或者它们只是BarFoo对象;所以OfType<BarFoo>
会返回所有对象。
答案 1 :(得分:1)
如果你不介意迭代两次(使用Linq),你可以使用两个单独的语句:
foreach (BarFoo barfoo in FooBos.FooBars.OfType<BarFoo>()
// Do something with barfoo
foreach (FooBar foobar in FooBos.Foobars.OfType<FooBar>()
// Do something with foobar
否则你将不得不在一个循环中完成它:
foreach (var entry in FooBos.FooBars)
{
BarFoo barfoo = entry as BarFoo;
if (barfoo != null)
{
// Do something with barfoo
}
else
{
FooBar foobar = entry as FooBar;
if (foobar != null)
{
// Do something with foobar
}
}
}