2011-08-30 5 views
4

각 필드를 수동으로 설정하지 않고 개체의 얕은 복사본 (새 인스턴스)을 만들려고합니다. 이 개체는 수정할 수있는 유형이 아니므로 개체에 들어가서 ICloneable을 구현할 수는 없습니다 ... 조금 붙어 있습니다. 단순히 객체를 복제하는 쉬운 방법이 있습니까? 아니면 각 객체를 새로운 객체에 복사하는 Clone() 메소드를 구현해야합니까?추가 할 수없는 개체 복제 ICloneable

미리 도움을 청하십시오!

+0

는 object.MemberwiseClone이 작동 AutoMapper @ http://automapper.codeplex.com/ – Chandu

+0

에서보세요? http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone.aspx – cadrell0

+0

개체 (클래스 파일)를 편집 할 수 있었다면 복제하려면 예, 그러나이 개체는 3 번째 개체입니다. 파티 DLL을, 그리고 내가 뭔가를 놓치지 않는 한 MemberwiseClone() 호출하는 기능을 추가 할 수있는 액세스 권한이 없습니다. – MattW

답변

5

리플렉션을 사용하여 개체의 필드를보고이를 사용하여 새 인스턴스를 채 웁니다.

이것은 인수가없는 생성자의 존재에 대해 몇 가지 가정을합니다.

Type t = typeof(typeToClone); 
var fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
var copy = Activator.CreateInstance(t); 
for(int i = 0; i < fields.Length; i++) 
    fields[i].SetValue(copy, fields[i].GetValue(existing)); 
+0

그 트릭을 ... 고마워! – MattW

관련 문제