首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何克隆对象

如何克隆对象
EN

Stack Overflow用户
提问于 2011-03-19 09:11:17
回答 12查看 171.1K关注 0票数 59

当我执行以下操作时..对人b做的任何事情都会修改人a(我认为这样做会将人b从人a克隆出来)。我也不知道改变人a会不会在链接后改变人b。由于我现在的代码,我只能看到一个方向。

代码语言:javascript
复制
Person a = new Person() { head = "big", feet = "small" };
Person b = a; 

b.head = "small"; //now a.head = "small" too   

现在如果我这样做的话..人a变得完全独立。

代码语言:javascript
复制
Person b = new Person() { head = a.head, feet = a.feet };

现在,当将这种行为与C#中的其他行为进行比较时,这种良好的和有意义的行为是有意义的。但是,对于大型对象,这可能会变得非常恼人。

有没有捷径呢?

例如:

Person b = a.Values;

EN

回答 12

Stack Overflow用户

发布于 2014-07-17 00:34:06

为此,我使用AutoMapper。它是这样工作的:

代码语言:javascript
复制
Mapper.CreateMap(typeof(Person), typeof(Person));
Mapper.Map(a, b);

现在,人员a具有人员b的所有属性。

顺便说一句,AutoMapper也适用于不同的对象。欲了解更多信息,请访问http://automapper.org

更新:我现在使用这个语法(简单地说--实际上CreateMaps在AutoMapper配置文件中):

代码语言:javascript
复制
Mapper.CreateMap<Person, Person>;
Mapper.Map(a, b);

请注意,您不必执行CreateMap来将同一类型的一个对象映射到另一个对象,但如果您不这样做,AutoMapper将创建一个浅层副本,这对外行来说意味着,如果您更改一个对象,其他对象也会更改。

票数 23
EN

Stack Overflow用户

发布于 2016-09-24 01:44:29

由于MemberwiseClone()方法不是公共的,所以我创建了这个简单的扩展方法,以便更容易地克隆对象:

代码语言:javascript
复制
public static T Clone<T>(this T obj)
{
    var inst = obj.GetType().GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

    return (T)inst?.Invoke(obj, null);
}

用法:

代码语言:javascript
复制
var clone = myObject.Clone();
票数 17
EN

Stack Overflow用户

发布于 2014-04-25 17:38:27

要克隆类对象,可以使用Object.MemberwiseClone方法,

只需将此函数添加到您的类中:

代码语言:javascript
复制
public class yourClass
{
    // ...
    // ...

    public yourClass DeepCopy()
    {
        yourClass othercopy = (yourClass)this.MemberwiseClone();
        return othercopy;
    }
}

然后,要执行深度独立复制,只需调用DeepCopy方法:

代码语言:javascript
复制
yourClass newLine = oldLine.DeepCopy();
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5359318

复制
相关文章

相似问题

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