c# - 如何在不更改其内存位置的情况下将类的值复制到其他类
问题描述
我想知道是否有任何方法可以将一个对象复制到另一个对象,而不更改它们的内存位置,如下例所示。
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;
因为我事先不知道对象的字段。
先感谢您。
解决方案
使用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));
}
}
推荐阅读
- python - 带有 tkinter 的 GUI
- kotlin - 无法从启动中调用挂起功能
- swift - 试图找出 Project euler 问题 1,(得到 1000 以下的所有数字的总和,在 3 和 5 下可整除
- python - 我正在尝试使用 django 实现博客应用程序。在应用程序的主页中,我需要显示个人资料图片旁边的帖子列表?
- python - 带有散点图的 Python 底图
- python - python signalR - 尝试连接时出现500服务器错误
- docker - Neo4j docker-compose 图像拒绝连接到应用程序
- python - 从第一个非空白之前获取列的子集
- php - Laravel - 在中间件中测试独特的 cookie 创建
- php - 如何在 .htaccess 中启用 escapeshellarg() 这是可能的