0

我有一个 Platform 类作为基类,还有 2 个类 IOSPlatform 和 AndroidPlatform 是从 Platform 派生的。

除此之外,还有一个具有 Platform 对象作为导航属性的 Device 类。

在查询所有 IOS 平台设备时,下面的 linq 表达式就像一个魅力。

devices.Where(t=> t.Platform is IOSPlatform)

我想通过动态检查类类型来改进此查询,例如:

Platform p = new IOSPlatform();
devices.Where(t=> t.Platform is /*derived class of p object*/) 

有没有办法做到这一点 ?

此致,

凯末尔

4

4 回答 4

4
Platform p = new IOSPlatform();
devices.Where(t=> t.Platform.GetType()==p.GetType()) 
于 2012-08-21T18:54:29.773 回答
1

我不确定我是否理解,但听起来你想要

devices.Where(t =>
    p.GetType().IsAssignableFrom(t.Platform.GetType())
    );
于 2012-08-21T19:15:03.190 回答
1

关于什么:

Platform p = new IOSPlatform();
devices.Where(t=> t.Platform.GetType().BaseType == p.GetType());
于 2012-08-21T19:01:28.757 回答
0

您是否尝试验证列表中的对象是否继承自 Platform?"is" 操作符已经验证了 .. 你可以使用这个:

devices.Where(d => d.Platform is Platform);

甚至使用 OfType 方法:

devices.OfType<IOSPlatform>();
于 2012-08-21T19:00:13.697 回答