在集合中保存派生类属性

时间:2014-10-12 22:18:51

标签: c# class derived

我需要帮助,因为我遇到了遇到的问题。我有一个列表List<Items> ItemList我希望将一些 ContainerItems 放入该列表中,但是当我这样做时,所有的 ContainerItems 属性消失了,它变成了 Items

的基类
class Items
{
    public Items()
    {

    }
    public string Name { get; set; }
    public int durability { get; set; }
}
class ContainerItems : Item
{
    public ContainersItem()
    {

    }
    public int maxItems { get; set; }
    public List<Items> ContainItems { get; set;}
}

理想情况下,我希望将我制作的所有项目存储到Dictionary<string,Items>中。是否仍然存储所有 ContainerItems 并保留其属性?提前谢谢!

2 个答案:

答案 0 :(得分:2)

假设您有项目列表:

public List<Items> ContainItems { get; set }

现在你想循环遍历它们,但是安全,因为并非所有列表成员都是ContainerItems对象:

foreach(var item in ContainItems)
{
    if(item is ContainerItems)
    {
        var containerItems = (ContainerItems)item;
    }
    else
    {
        //Otherwise deal with it as an Items object
    }
}

答案 1 :(得分:1)

每次要使用特定于此类的字段或函数时,您将(1)将列表定义为List<ContainersItem>或(2)在ContainersItem中投射列表内容