如何将数据从数据类复制到C#中的对象。(Unity)

时间:2017-10-09 09:16:35

标签: c#

我想定义一种方法,将数据从另一个数据类复制到新定义的对象,然后返回它。例如:

public GameData Gett() {
    point pt = new point();
    return pt;
}

public class point : GameData
{
    public int TouchGround;
}

那么我应该怎么做才能将数据从TouchGround复制到pt然后将其作为对象返回?

2 个答案:

答案 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();