我想做的事情如下:
MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)
然后更改未在原始对象中反映的新对象.
我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.
如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?
我在我的应用程序中处理Bitmaps,出于某些目的,我需要创建Bitmap的深层副本.有一种优雅的方式怎么做?
我试过了
Bitmap deepCopy = original.Clone();
Run Code Online (Sandbox Code Playgroud)
,显然这不会创建一个深层副本,而是浅层副本.我的下一个尝试是创建一个新的位图
Bitmap deepCopy = new Bitmap(original);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个构造函数是Bitmap(Image),而不是Bitmap(Bitmap),而Bitmap(Image)会将我漂亮的8bppIndexed Pixelformat转换为另一个.
另一种尝试是使用MemoryStream
public static Bitmap CreateBitmapDeepCopy(Bitmap source)
{
Bitmap result;
using (MemoryStream stream = new MemoryStream())
{
source.Save(stream, ImageFormat.Bmp);
stream.Seek(0, SeekOrigin.Begin);
result = new Bitmap(stream);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
好吧,这也不起作用,因为必须在Bitmap的整个生命周期内打开MemoryStream.
所以,我总结了所有的后端,我真的很想看到一个很好的优雅方式来创建一个Bitmap深层副本.感谢那 :)