繁体   English   中英

通用包装对象列表

[英]List of Generic Wrapper Objects

谁能告诉我为什么我不能将包含具有继承的泛型类的包装器添加到列表中?

public abstract class SectorObject{} 
public class SpawnPoint : SectorObject
public class Trigger : SectorObject
public class SectorObjectList<T>  where T : SectorObject { public List<T> items ; };


public List<SectorObjectList<SectorObject>> objectLists = new List<SectorObject< SectorObject>>();

SectorObjectList <SpawnPoint> spawnPoints = new SectorObjectList<SpawnPoint>();

objectLists.Add(spawnPoints);  // This line doesn't work.

它仅以此方式工作:

public List<SectorObjectList<SpawnPoint>> objectLists = new List<SectorObject< SpawnPoint>>();
SectorObjectList <SpawnPoint>spawnPoints = new SectorObjectList<SpawnPoint>();
objectLists.Add(spawnPoints);  

干杯。

经典协方差/对数问题。 您可以在Stack Overflow上找到很多相关的帖子, 例如这篇文章 在不进行强制转换和转换的情况下,应将抽象类用于声明,将具体类用于初始化:

List<SectorObjectList<SectorObject>> objectLists = 
    new List<SectorObjectList<SectorObject>>();
SectorObjectList<SectorObject> spawnPoints = new SectorObjectList<SectorObject>();
spawnPoints.items = new List<SectorObject>();
spawnPoints.items.Add(new SpawnPoint());
objectLists.Add(spawnPoints);

如果您的SectorObjectList明确绑定到SpawnPoint ,那么您可以抛弃适配器:

var spawnPoints2 = new SectorObjectList<SpawnPoint>() { 
    items= new List<SpawnPoint>()};
var spawnPointsCopy = new SectorObjectList<SectorObject>() { items= spawnPoints2.items.Cast<SectorObject>().ToList() };
objectLists.Add(spawnPointsCopy);  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM