通用包装器对象列表

本文关键字:对象 列表 包装 | 更新日期: 2023-09-27 18:29:44

有人能告诉我为什么我不能向列表中添加一个包含具有继承性的泛型类的包装器吗?

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);