C#中各类的列表

时间:2013-07-15 02:40:22

标签: c# list collections unity3d

有没有办法在C#中实现各种类型的对象列表?即。

GenericCollection genCol = new GenericCollection();
Class1 c1 = new Class1();
Class1 c2 = new Class2();

genCol.Add(c1);
genCol.Add(c2);

我在Unity3D 3(不是Unity3D 4)中使用它,我需要将该集合序列化 Here's a description of Unity serializables.

1 个答案:

答案 0 :(得分:1)

不,Unity根本不直接支持多态序列化。

您需要找到不需要此功能的替代设计。为每种类型保留单独的列表是一种选择:

class MyStuff
{
   public List<Class1> Class1List;
   public List<Class2> Class2List;
}

您可以创建一个包装器方法,以便更轻松地选择类型列表:

List<Type> GetList<Type>()
{
   var type = typeof(Type);
   if (type == typeof(Class1))
     return Class1List;
   else if (type == typeof(Class2))
     return Class2List;
   else
     return null;
}

可以编写一个迭代,依次迭代每个项目。这是一个坏主意,因为迭代器的构造会产生垃圾,你应该努力避免使用GCes(Unity,HTML5等)在这些平台上制作游戏的经验。

我不记得Unity的Mono版本是否有生成器,但如果确实如此,你可以这样做:

IEnumerable<Object> All()
{
   foreach (var i : Class1List)
     yield return i;
   foreach (var i : Class2List)
     yield return i;
}

没有生成器,代码有点丑陋(你需要保持自己的状态),但可行。你应该能够自己想出那些代码。我建议在游戏过程中不要使用这种方法,因为垃圾收集器在游戏等软实时应用程序中可能会遇到非常严重的问题。