使用所有存储的值克隆一个实例
Make a clone of an instanced with all the stored values
我有两个 classes,一个叫 warehouse,一个叫 Warehouselocations。
仓库当前能够在仓库位置创建、存储和查找箱子。
但现在我还需要仓库能够使用所有存储的信息创建 wareHouseLocation 的克隆版本。
locations = new List<WareHouseLocation>();
这是我存储所有信息的列表。我希望能够复制它。
我试图找到自己的答案,甚至尝试了一些代码,但到目前为止我没有任何能正常工作的东西。
public WareHouseLocation DeepCopy()
{
foreach (WareHouseLocation wareHouseLocation in locations)
{
if(wareHouseLocation == null)
{
return null;
}
else
{
//Need code here
}
}
return null;
}
代码目前在仓库中class。
我很高兴任何能帮助我的事情。
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 的代码。
我认为你可以使用 JsonConvert.SerializeObject 和 JsonConvert.DeserializeObject 进行复制,
var json = JsonConvert.SerializeObject(put_your_object_here);
var copy = JsonConvert.DeserializeObject<your_object_type>(json);
你可以通过实现ICloneable
接口来实现:
public class WareHouseLocation : ICloneable
{
public int FloorID { get; set; }
public List<I3DStorageObject> storage = new List<I3DStorageObject>();
public double MaxVolume;
public double MaxWeight;
//rest of code
public object Clone()
{
var copy = (WareHouseLocation)MemberwiseClone();
copy.storage = storage.Select(item => (I3DStorageObject)item.Clone()).ToList();
return copy;
}
}
因为你在 WareHouseLocation
中有一个 List
引用类型,你还需要通过为 I3DStorageObject
实现 ICloneable
来正确克隆它,因为MemberwiseClone
只复制引用,而不是引用对象本身
public class I3DStorageObject : ICloneable
{
public double Volume { get; set; }
public object Clone()
{
return MemberwiseClone();
}
}
您还可以查看 MemberwiseClone
以了解 deep/shallow 对象副本的详细信息和示例
我有两个 classes,一个叫 warehouse,一个叫 Warehouselocations。 仓库当前能够在仓库位置创建、存储和查找箱子。
但现在我还需要仓库能够使用所有存储的信息创建 wareHouseLocation 的克隆版本。
locations = new List<WareHouseLocation>();
这是我存储所有信息的列表。我希望能够复制它。
我试图找到自己的答案,甚至尝试了一些代码,但到目前为止我没有任何能正常工作的东西。
public WareHouseLocation DeepCopy()
{
foreach (WareHouseLocation wareHouseLocation in locations)
{
if(wareHouseLocation == null)
{
return null;
}
else
{
//Need code here
}
}
return null;
}
代码目前在仓库中class。 我很高兴任何能帮助我的事情。
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 的代码。
我认为你可以使用 JsonConvert.SerializeObject 和 JsonConvert.DeserializeObject 进行复制,
var json = JsonConvert.SerializeObject(put_your_object_here);
var copy = JsonConvert.DeserializeObject<your_object_type>(json);
你可以通过实现ICloneable
接口来实现:
public class WareHouseLocation : ICloneable
{
public int FloorID { get; set; }
public List<I3DStorageObject> storage = new List<I3DStorageObject>();
public double MaxVolume;
public double MaxWeight;
//rest of code
public object Clone()
{
var copy = (WareHouseLocation)MemberwiseClone();
copy.storage = storage.Select(item => (I3DStorageObject)item.Clone()).ToList();
return copy;
}
}
因为你在 WareHouseLocation
中有一个 List
引用类型,你还需要通过为 I3DStorageObject
实现 ICloneable
来正确克隆它,因为MemberwiseClone
只复制引用,而不是引用对象本身
public class I3DStorageObject : ICloneable
{
public double Volume { get; set; }
public object Clone()
{
return MemberwiseClone();
}
}
您还可以查看 MemberwiseClone
以了解 deep/shallow 对象副本的详细信息和示例