[英]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.