wpf2017. 7. 24. 15:03

List<Object Class> 의 리스트를 duplicate 해서 새로운 리스트를 만들고 그안에 object property를 수정하고 싶었다.


하지만 list를 duplicate 했더라도 안에 프로퍼티를 바꾸면 오리지널 데이터까지 바뀌어졌다.
그래서 해당 obejct class 에 ICloneable interface를 사용하여서 해결하였다.

이렇게 object에 interface를 선언하고

1
2
3
4
5
6
7
8
9

public class OrderItem : ICloneable
    {     
        public int GroupCount { get; set; }
 
        public object Clone()
        {
            return this.MemberwiseClone();
        }
    }

구현 하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static List<OrderItem> GroupOrderItemByName(List<OrderItem> orderList)
        {
            var groupOrderItemList = new List<OrderItem>();
            var result = orderList.GroupBy(s => s.Name).ToList();
 
            foreach (var item in result)
            {
                var orderItem = (OrderItem)item.ToList()[0].Clone();
                orderItem.GroupCount = item.Count();
                groupOrderItemList.Add(orderItem);
            }
            
             return groupOrderItemList;
         }


참고 : https://stackoverflow.com/questions/6569486/creating-a-copy-of-an-object-in-c-sharp



Posted by 동동(이재동)