繁体   English   中英

C#如何将类从类数组添加到列表

[英]c# how to add class to a list from an array of classes

我有一个类来定义例如一艘船,然后我有一个带有一些默认参数的类的数组,但是稍后我希望能够使用预定义的示例之一添加到类的列表中。 我不知道如何在将预定义类添加到列表的同时创建它的副本,而不是指向原始数组的指针。 这是希望将其弄清楚的代码。

   public enum ShipType
    {
      Capital,
      Cruiser,
      Frigate,
      Fighter,
      Colony,
      NumShipTypes
    }
    public class Ship
    {
      public Vector3 ShipPosition;
      public ShipType Type;
      public string DesignName;
      public Ship(ShipType type,string designame)
      {
        Type = type;
        DesignName = designame;
        ShipPosition = Vector3.zero;
      }
    }

然后我的默认类型数组:

public Ship[] AllShips = new Ship[(int)ShipType.NumShipTypes]
  { 
    new Ship(ShipType.Capital,"MassiveOne"),
    new Ship(ShipType.Cruiser,"MediumOne"),
    new Ship(ShipType.Frigate,"SmallerOne"),
    new Ship(ShipType.Fighter,"TinyOne"),
    new Ship(ShipType.Colony,"Mayflower")
  };

现在,我创建一个列表和此处要添加上述其中一项的副本的地方:-

public List<Ship> FleetShips = new List<Ship>(); 

FleetShips.Add(AllShips[(int)ShipType.Fighter]); 

但这似乎只是在数组中添加一个引用或指针。 我需要的是这样的东西,但实际上有效:

FleetShips.Add(new AllShips[(int)ShipType.Fighter]()); 

但这给我“是一个字段,但像一个类型一样使用”错误

有任何想法吗?

您可以使您的类实现ICloneable接口并实现自己的Clone()方法。

然后,当您要将其添加到收藏夹中时,可以执行此操作

FleetShips.Add((Ship)AllShips[(int)ShipType.Fighter].Clone());

另一种可能性是将复制构造函数添加到您的Ship-class。

public class Ship
{
  public Vector3 ShipPosition;
  public ShipType Type;
  public string DesignName;
  public Ship(ShipType type,string designame)
  {
    Type = type;
    DesignName = designame;
    ShipPosition = Vector3.zero;
  }
  //copy-constructor
  public Ship(Ship other)
  {
    Type = other.Type;
    DesignName = other.DesignName;
    ShipPosition = Vector3.zero;
  }
}

当您想要添加飞船的副本时

FleetShips.Add(new Ship(AllShips[(int)ShipType.Fighter]));

实现ICloneable。

   public class Ship: ICloneable
    {
        public Vector3 ShipPosition;
        public ShipType Type;
        public string DesignName;
        public Ship(ShipType type, string designame)
        {
            Type = type;
            DesignName = designame;
            ShipPosition = Vector3.zero;
        }


        public object Clone()
        {
           return this.MemberwiseClone();
        }
    }

FleetShips.Add(AllShips[(int)ShipType.Fighter].Clone() as Ship); 

编辑:仍然可能是一个问题,具体取决于什么是Vector3

暂无
暂无

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

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