我有一类 3 个不同的链表(用于在我正在开发的游戏中保存实体)。这些列表都是具有相同基本类型的对象,但出于处理原因,我将它们分开。请注意,IEntity、IObject 和 IUndead 都继承自 IEntity。
public class EntityBucket
{
public LinkedList<IEntity> undeadEntities;
public LinkedList<IEntity> objects;
public LinkedList<IEntity> livingEntities;
public EntityBucket()
{
undeadEntities = new LinkedList<IEntity>();
objects = new LinkedList<IEntity>();
livingEntities = new LinkedList<IEntity>();
}
public LinkedList<IEntity> GetList(IObject e)
{
return objects;
}
public LinkedList<IEntity> GetList(IUndead e)
{
return undeadEntities;
}
public LinkedList<IEntity> GetList(ILiving e)
{
return livingEntities;
}
}
我有 3 种方法来检索每个列表,目前基于它们的参数。有 3 个这一事实很好,因为我知道每个列表都会以某种方式需要它自己的访问器。不过,传递一个实例化的对象并不理想,因为我可能想在某个地方检索一个列表,而手头没有类似类型的对象。请注意,这里的对象甚至没有在 GetList 方法中使用,它们只是用来确定要使用的版本。这是我手头有一个实例化对象的示例:
public void Delete(IUndead e, World world)
{
.....
LinkedList<IEntity> list = buckets[k].GetList(e);
.....
}
我不喜欢这个当前的实现,因为我可能并不总是手头有一个实例化的对象(例如在渲染实体时)。我正在考虑一般地这样做,但我不确定这是否可能与我想做的事情有关。有了这个,我还需要 3 个 Delete 方法(以及 3 个任何其他方法,例如 add 等) - 每种类型一个,IUndead、IObject 和 ILiving。我只是觉得这不是正确的做法。
我会根据要求发布到目前为止我尝试做的事情,但是我的泛型相当糟糕,我觉得任何人阅读这篇文章也是一种浪费。
最后,性能非常重要。我不是过早地优化,我是后期优化,因为我已经有工作代码,但需要它更快。getlist 方法将被非常频繁地调用,我想避免任何显式类型检查。