我有两类,一类称为仓库,一类称为Warehouselocations。Warehouse目前能够在仓库位置创建,存储和查找盒子。
但是现在我还需要仓库能够使用所有存储的信息创建WareHouseLocation的克隆版本。
locations = new List<WareHouseLocation>();
这是我存储所有信息的列表。我希望能够复制它。
我试图找到自己的答案,甚至尝试了一些代码,但到目前为止,我什么都没有正常工作。
public WareHouseLocation DeepCopy()
{
foreach (WareHouseLocation wareHouseLocation in locations)
{
if(wareHouseLocation == null)
{
return null;
}
else
{
//Need code here
}
}
return null;
}
该代码当前在WareHouse类中。我为任何可以帮助我的事情感到高兴。
public class WareHouseLocation
{
public int FloorID { get; set; }
public List<I3DStorageObject> storage = new List<I3DStorageObject>();
public double MaxVolume;
public double MaxWeight;
public WareHouseLocation(double height, double width, double depth)
{
MaxVolume = height * width * depth;
MaxWeight = 1000;
}
public bool hasAvailableVolumeForObject(I3DStorageObject s)
{
double currentVolume = 0;
foreach (I3DStorageObject obj in storage)
{
currentVolume += obj.Volume;
}
double available = MaxVolume - currentVolume;
if (s.Volume <= available)
{
return true;
}
else
{
return false;
}
}
}
这里是WareHouseLocation的代码。
您可以通过实现ICloneable
接口来实现,就像这样:
public class WareHouseLocation : ICloneable
{
public int FloorID { get; set; }
public List<I3DStorageObject> storage = new List<I3DStorageObject>();
public double MaxVolume;
public double MaxWeight;
...
public object Clone()
{
var copy = (WareHouseLocation)MemberwiseClone();
copy.storage = storage.Select(item => (I3DStorageObject)item.Clone()).ToList();
return copy;
}
}
由于List
中有一个WareHouseLocation
引用,因此也必须通过为ICloneable
实现I3DStorageObject
来正确克隆此引用,因为MemberwiseClone
仅复制引用,而不复制引用的对象
public class I3DStorageObject : ICloneable
{
public double Volume { get; set; }
public object Clone()
{
return MemberwiseClone();
}
}
您也可以在MSDN中查找MemberwiseClone
方法和对象的深/浅副本的详细信息和示例
我认为您可以使用JsonConvert.SerializeObject和JsonConvert.DeserializeObject进行复制,
var json = JsonConvert.SerializeObject(put_your_object_here);
var copy = JsonConvert.DeserializeObject<your_object_type>(json);