0

假设在我的数据库中,我有 2 个类:FooBar 类和 BarFoo 类。我对我的数据库执行查询,它返回包含 FooBar 列表的类 FooBos,该列表可以包含 BarFoo 的实例(不要问我为什么,这是我获取数据库的方式,我无法编辑它)。

无论如何,要构建我的域对象,我会使用以下代码检查哪个类是哪个类

if(FooBos.FooBars.OfType<BarFoo>().Count() != 0)
  //Do things for FooBar here
else
  //Do Things for BarFoo here

所以问题出在 OfType 之后,整个列表都是 BarFoo 类型的,我似乎不知道为什么。

任何人都知道为什么会这样?

4

2 回答 2

1

通常,OfType<>只要存在继承关系就使用。在您的情况下,我怀疑 FooBar 是 BarFoo 的孩子。

如果是这种情况,则意味着列表中的所有对象要么继承 BarFoo 要么它们只是 BarFoo 对象;所以OfType<BarFoo>返回所有对象。

于 2013-11-05T09:24:17.187 回答
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
        }
    }
}
于 2013-11-05T09:24:58.790 回答