C# C语言中的分类类列表

C# C语言中的分类类列表,c#,list,collections,unity3d,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,我需要集合可以序列化 不,Unity根本不支持多态序列化 您需要找到不需要此功能的替代设计。为每种类型保留单独的列表是

有没有一种方法可以在C中实现各种类型的对象列表?即

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

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

我使用的是Unity3D 3而不是Unity3D 4,我需要集合可以序列化

不,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;
}

如果没有生成器,代码会有点难看,您需要维护自己的状态,但这是可行的。你应该能够自己编写代码。我建议在游戏中不要使用这种方法,因为垃圾收集器尖峰会在游戏等软实时应用程序上产生非常真实的问题。不,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;
}
如果没有生成器,代码会有点难看,您需要维护自己的状态,但这是可行的。你应该能够自己编写代码。我建议不要在游戏中使用这种方法,因为垃圾收集器尖峰会在游戏等软实时应用程序上产生非常真实的问题