当我执行以下操作时..对人b做的任何事情都会修改人a(我认为这样做会将人b从人a克隆出来)。我也不知道改变人a会不会在链接后改变人b。由于我现在的代码,我只能看到一个方向。
Person a = new Person() { head = "big", feet = "small" };
Person b = a;
b.head = "small"; //now a.head = "small" too
现在如果我这样做的话..人a变得完全独立。
Person b = new Person() { head = a.head, feet = a.feet };
现在,当将这种行为与C#中的其他行为进行比较时,这种良好的和有意义的行为是有意义的。但是,对于大型对象,这可能会变得非常恼人。
有没有捷径呢?
例如:
Person b = a.Values;
发布于 2014-07-17 00:34:06
为此,我使用AutoMapper。它是这样工作的:
Mapper.CreateMap(typeof(Person), typeof(Person));
Mapper.Map(a, b);
现在,人员a具有人员b的所有属性。
顺便说一句,AutoMapper也适用于不同的对象。欲了解更多信息,请访问http://automapper.org
更新:我现在使用这个语法(简单地说--实际上CreateMaps在AutoMapper配置文件中):
Mapper.CreateMap<Person, Person>;
Mapper.Map(a, b);
请注意,您不必执行CreateMap来将同一类型的一个对象映射到另一个对象,但如果您不这样做,AutoMapper将创建一个浅层副本,这对外行来说意味着,如果您更改一个对象,其他对象也会更改。
发布于 2016-09-24 01:44:29
由于MemberwiseClone()方法不是公共的,所以我创建了这个简单的扩展方法,以便更容易地克隆对象:
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);
}
用法:
var clone = myObject.Clone();
发布于 2014-04-25 17:38:27
要克隆类对象,可以使用Object.MemberwiseClone方法,
只需将此函数添加到您的类中:
public class yourClass
{
// ...
// ...
public yourClass DeepCopy()
{
yourClass othercopy = (yourClass)this.MemberwiseClone();
return othercopy;
}
}
然后,要执行深度独立复制,只需调用DeepCopy方法:
yourClass newLine = oldLine.DeepCopy();
https://stackoverflow.com/questions/5359318
复制相似问题