按对象类型从列表中选择

时间:2015-03-25 12:27:54

标签: c#

我的项目结构:

class Attachment { ... }
class Photo : Attachment { ... }
class Document : Attachment { ... }

class Page
{
    public List<Attachment> attachments;
                ...
}

我从服务器接收页面:

List<Page> pages = ...load pages from server;

我需要从这个列表页面中获取附件中只有类型为Photo的对象。

我该怎么做?

2 个答案:

答案 0 :(得分:6)

您可以使用OfType

var photos = attachments.OfType<Photo>();

如果您希望所有网页只包含照片附件:

var pagesWithPhotosOnly = pages.Where(p => p.attachments.All(pa => pa is Photo));

答案 1 :(得分:5)

实现此目的的一种方法是迭代列表并检查Attachment的类型。

var photos = attachments.Where(a => a is Photo);

正如评论和@TimSchmelter的回答中所指出的另一种方法是直接使用OfType扩展方法,这种方法可以说是更多&#34;表达&#34;而不是使用Where