开发者

C# - List member needs deep copy?

开发者 https://www.devze.com 2022-12-21 09:46 出处:网络
I have class with a List<int> member. If I want to clone an instance of this class, do I need a deep copy or the MemberwiseClone() shallow copy is enough?

I have class with a List<int> member. If I want to clone an instance of this class, do I need a deep copy or the MemberwiseClone() shallow copy is enough?

We need a deep copy if at least one member is a reference to an object开发者_如何学C, right? Does that mean having List, DateTime, String, MyClass, ..., will need a deep copy?


This entirely depends on how you plan to use the copy.

If you do a shallow copy like

List<int> x = new List<int>() { 1, 2, 3, 4, 5 };
List<int> y = x;
y[2] = 4;

Then x will contain {1, 2, 4, 4, 5 }

If you do a deep copy of the list:

List<int> x = new List<int> { 1, 2, 3, 4, 5 };
List<int> y = new List<int>(x);
y[2] = 4;

Then x will contain { 1, 2, 3, 4, 5 } and y will contain { 1, 2, 4, 4, 5 }

How you plan on using the copy really determines whether you use shallow or deep copies.


If you have List<int> originalList = new List{1, 2} then doing this:
List<int> newList = new List<int>();
foreach(int i in originalList)
newList.Add(i);

will get you a cloned list.

However, if you tried what I did above with a List generic on some reference type, then you would not succeed. After altering one of the objects in your list, you would see the altered version whether referencing it from the original list or the new list.


Short answer, yes.

Long answer, you need to determine what the copy in your case actually means with respect to the list. Do you need a copy of the contents of the list as well? For value types like ints, its pretty straight forward, if it were reference types though....yo have some questions to ask regarding what you want your list to contain.

0

精彩评论

暂无评论...
验证码 换一张
取 消