2017-09-03 2 views
1

많은 속성을 가진 객체가 있고 각 반복에서 해당 객체의 복사본을 만들어 모든 객체가 마지막으로 설정된 값으로 새로운 객체에 복사되도록해야합니다. (내 개체가 사실 많은 속성을 가진 사용자 지정 사용자 지정 컨트롤이기 때문에 모든 속성과 값을 하나씩 복사 할 수 없습니다. 모두를 모릅니다.)C# 값으로 객체 복사

+0

무엇을 시도 했습니까? 물건을 보여주세요. 속성을 하나씩 복사 할 수없는 이유는 무엇입니까? –

+0

개체는 실제로 내 자신이 만든 사용자 정의 컨트롤입니다. 나는 사용자 컨트롤의 모든 속성을 알지 못한다! – MohsenCs

+0

@ReyanChougle, 귀하의 의견을 주셔서 감사합니다, 내 개체가 사용자 정의 컨트롤 및 속성이 많이 있기 때문에 사용자 지정 복제 기능을 구현할 수 없습니다. – MohsenCs

답변

2

훨씬 간단한 방법이 있습니다. JSON serializer를 사용하여 객체를 다른 객체에 복제하는 방법. 이 트릭은 JSON.NET과 같은 JSON 시리얼 라이저와 같이 복제 된 클래스에 인터페이스를 수정하거나 구현하지 않아도됩니다.

public static T Clone<T>(T source) 
{ 
    var serialized = JsonConvert.SerializeObject(source); 
    return JsonConvert.DeserializeObject<T>(serialized); 
} 
+0

Newtonsoft.Json을 설치해야합니다 –

1

당신은 모든 개체 필드를 복사하려면이 확장 방법을 사용할 수 있습니다 당신이 참조 타입 필드와 속성을 복사 할 때 properties.There는 약간의 오차가있을 수 있습니다.

public static T CopyObject<T>(this T obj) where T : new() 
     { 
      var type = obj.GetType(); 
      var props = type.GetProperties(); 
      var fields = type.GetFields(); 
      var copyObj = new T(); 
      foreach (var item in props) 
      { 
       item.SetValue(copyObj, item.GetValue(obj)); 
      } 
      foreach (var item in fields) 
      { 
       item.SetValue(copyObj, item.GetValue(obj)); 
      } 
      return copyObj; 
     }