我正在为游戏创建一个项目系统。我正在尝试将所有项目存储在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.
}
}
答案 0 :(得分:4)
这正是OfType
用于:
List<WeaponItem> filteredItems = items.OfType<WeaponItem>().ToList();
上面的代码会将列表过滤为WeaponItem
类型的项目或可投放到WeaponItem
的项目。