C#基于派生类型获取对象的过滤列表

时间:2016-12-11 05:54:26

标签: c# linq

我正在为游戏创建一个项目系统。我正在尝试将所有项目存储在List<Item>类中的单个ItemDatabase中,然后提取属于Item类型的特定子类的项目。在我的编辑器中绘制的项目将根据它们的项目类型进行过滤,并显示在相应的页面上。我无法找出LINQ查询来使其工作。

interface IItem
{
    string Name { get; set; }
}

//need to do this because I cannot serialize interface in Unity3D.
class Item : IItem 
{
    public string Name { get; set; }
}

class WeaponItem : Item 
{
    //stuff
}

class ItemDatabase
{
    public List<Item> Items { get; set; }
}

class ItemEditor
{
    void SomeMethod()
    {
        var items = ItemDatabase.Items;        
        List<Item> filteredItems = //some way of getting all WeaponItem objects in items list. 
    }
}

1 个答案:

答案 0 :(得分:4)

这正是OfType用于:

List<WeaponItem> filteredItems = items.OfType<WeaponItem>().ToList();

上面的代码会将列表过滤为WeaponItem类型的项目或可投放到WeaponItem的项目。