我想定义一种方法,将数据从另一个数据类复制到新定义的对象,然后返回它。例如:
public GameData Gett() {
point pt = new point();
return pt;
}
public class point : GameData
{
public int TouchGround;
}
那么我应该怎么做才能将数据从TouchGround复制到pt然后将其作为对象返回?
答案 0 :(得分:0)
如果你的对象基本上有一些原始类型属性,你的数据类如Point(应该是大写的!)可以实现ICloneable接口。这意味着手动映射数据:
class Point : ICloneable
{
public int TouchGround;
public object Clone()
{
return new Point
{
TouchGround = this.TouchGround
}
}
}
如果必须在不同的类上复制很多属性,可以使用像automapper(http://automapper.org/)这样的框架。 它允许您执行以下操作:
Mapper.CreateMap<Point, Point>();
var point = new Point();
Mapper.Map<Point, Point>(existingPoint, point);
另一种选择是将数据对象创建为结构。根据作业复制结构。 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/structs
答案 1 :(得分:0)
对于浅拷贝,您可以使用C#ICloneable接口中提供的MemberwiseClone()方法。所以,你的观点类应该改为这个。
public class point : GameData, ICloneable
{
public int TouchGround;
public object Clone()
{
return this.MemberwiseClone();
}
}
对于浅拷贝,你可以使用它。
point a = new point();
a.TouchGround = 1;
// Next lines, create a shallow copy of a and put into b.
point b = (point)a.Clone();
b.TouchGround = 20;
Console.WriteLine(a.TouchGround);
Console.WriteLine(b.TouchGround);
Console.ReadLine();
对于深层复制,您需要序列化此类,然后反序列化为另一个相同类型的对象。您可以使用Newtonsoft.JSON执行此操作。你的课应该是可序列化的。 Check this for similar details。您也可以使用DataContractSerializer。
point x = new point();
x.TouchGround = 35;
point y = JsonConvert.DeserializeObject<point>(JsonConvert.SerializeObject(x));
y.TouchGround = 40;
Console.WriteLine(x.TouchGround);
Console.WriteLine(y.TouchGround);
Console.ReadLine();