我想知道是否有任何方法可以将一个对象复制到另一个对象,而不更改它们的内存位置,如下面的示例所示。
class PersonData
{
public string PersonName;
public int age;
public PersonData(string name, int age)
{
this.age = age;
PersonName = name;
}
}
class Program
{
static void Main(string[] args)
{
object person1 = new PersonData("FirstPerson",20);
object person2 = new PersonData("secondPerson",30);
person1 = person2;
}
}person1将开始指向person2的内存位置。我想要做的就是将person2的值复制到person1的内存位置。还有没有别的方法
person1.age = person2.age;
person1.name = person2.name;因为我事先不知道对象的字段。
提前谢谢你。
发布于 2020-04-29 00:09:49
使用deep copy,
Deep copy将创建一个实例,并将值复制到自己的内存位置。
.Net有很多方法可以做到这一点。
我认为使用序列化对象是最简单的方法。
示例代码(使用Newtonsoft.Json包):
class PersonData
{
public string PersonName;
public int age;
public PersonData(string name, int age)
{
this.age = age;
PersonName = name;
}
}
class Program
{
static void Main(string[] args)
{
object person1 = new PersonData("FirstPerson",20);
object person2 = new PersonData("secondPerson",30);
//First ,serialize the object, then copy to other object with deserialize
person2 = JsonConvert.DeserializeObject<Person>(JsonConvert.SerializeObject(source));
}
}发布于 2020-04-29 00:05:56
所有对象都有一个名为MemberwiseClone的受保护函数,该函数对类的成员进行浅层复制。通常,这是通过实现ICloneable接口来公开的。但是,请确保您了解浅层复制的含义。对于值类型的成员变量,它复制值。对于引用类型的成员变量,它复制引用。
public class PersonData : ICloneable {
public string PersonName;
public int age;
public PersonData(string name, int age)
{
this.age = age;
PersonName = name;
}
public object Clone() => this.MemberwiseClone();
}
class Program
{
static void Main(string[] args)
{
object person1 = new PersonData("FirstPerson",20);
object person2 = new PersonData("secondPerson",30);
person1 = person2.Clone();
}
}https://stackoverflow.com/questions/61484361
复制相似问题