我想做的事情如下:
MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)
然后更改未在原始对象中反映的新对象.
我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.
如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?
我想要一个真正的深拷贝.在Java中,这很容易,但是你如何在C#中做到这一点?
我正在研究一些用C#编写的代码.在这个应用程序中,我有一个自定义集合定义如下:
public class ResultList<T> : IEnumerable<T>
{
public List<T> Results { get; set; }
public decimal CenterLatitude { get; set; }
public decimal CenterLongitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Results使用的类型是三种自定义类型之一.每个自定义类型的属性只是基本类型(整数,字符串,bools,int?,bool?).以下是其中一种自定义类型的示例:
public class ResultItem
{
public int ID { get; set; }
public string Name { get; set; }
public bool? isLegit { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何执行我创建的ResultList对象的深层副本.我发现这篇文章:创建集合中所有元素的深层副本的通用方法.但是,我无法弄清楚如何做到这一点.
我有一个场景,如:
MyClass obj1 = new MyClass();
............//some operations on obj1;
MyClass obj2 = new MyClass();
obj2 = obj1;
Run Code Online (Sandbox Code Playgroud)
我有以下问题:如果我修改任何参数,它在两个对象中都受到影响(因为两者都指向相同的位置) - 但是,当我修改obj2参数时,它不应该修改obj1中的参数值(即意味着两者都不应该指向同一地点).我怎样才能做到这一点?请帮我.我无法在这里克隆,因为myclass没有实现ICloneable,我无法修改myclass.如果我通过序列化和反序列化克隆,它会是一个深度克隆吗?