首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不更改类的内存位置的情况下将类的值复制到其他类

如何在不更改类的内存位置的情况下将类的值复制到其他类
EN

Stack Overflow用户
提问于 2020-04-28 23:50:02
回答 2查看 83关注 0票数 0

我想知道是否有任何方法可以将一个对象复制到另一个对象,而不更改它们的内存位置,如下面的示例所示。

代码语言:javascript
运行
复制
 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的内存位置。还有没有别的方法

代码语言:javascript
运行
复制
person1.age = person2.age;
person1.name = person2.name;

因为我事先不知道对象的字段。

提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2020-04-29 00:09:49

使用deep copy

Deep copy将创建一个实例,并将值复制到自己的内存位置。

.Net有很多方法可以做到这一点。

我认为使用序列化对象是最简单的方法。

示例代码(使用Newtonsoft.Json包):

代码语言:javascript
运行
复制
 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));
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2020-04-29 00:05:56

所有对象都有一个名为MemberwiseClone的受保护函数,该函数对类的成员进行浅层复制。通常,这是通过实现ICloneable接口来公开的。但是,请确保您了解浅层复制的含义。对于值类型的成员变量,它复制值。对于引用类型的成员变量,它复制引用。

代码语言:javascript
运行
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61484361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档