问题是:
public class Entity {...}
public class Item : Entity {...}
...
List<Entity> EntityList = new List<Entity>();
List<Item> ItemList = new List<Item>();
EntityList.Add(ItemList[0]); //ItemList contains some object Item
现在EntityList[0]
包含Item
对象,但它具有Entity
作为.GetType
的对象,并且没有任何Item
属性,因为它是“转换”对象。是否有任何method
可以从实体“转换”回Item
?
我还想知道:将对象添加到具有父类类型的列表时,对象是否被破坏,然后重新构建为父类型对象?
答案 0 :(得分:3)
没有任何东西被破坏或重建,这全都与引用和变量类型有关。
您可以将Cow
保存在List<Animal>
中,但是Monkey
和Bear
也可以保存。从列表的枚举器中取回的项目将具有在列表中声明的类型,在这种情况下为Animal
,在您的情况下为Entity
。
您必须对每种可能性进行投射和测试:
foreach (var entity in EntityList)
{
if (entity is Item i)
{
// do something with i
}
if (entity is AnotherType a)
{
// do something with a
}
}
但是,当您希望将列表的全部内容都视为相同时,可以使用基本类型的列表。例如,因为您想对所有的动物都叫Animal.Eat()
,所以您并不在乎动物如何进食。
因此,您遇到的实际问题是,您有一个Entity
列表,而您实际上对Entity
并不感兴趣,但是对Item
感兴趣。