클래스가 있습니다. 나는 thios 클래스에 아무런 영향을 미치지 않는다. 다른 곳에서, 제 3 자로부터 오는 것이다.하위 클래스가있는 복사 클래스/개체
나는 내 자신의 수업을 가지고 있습니다. 업데이트 할 때도 마찬가지입니다. 하지만 나중에 개체가 누락 될 수 있습니다.
클래스를 복사해야하는데 여기에서 "소스"를 클래스 "대상"으로 호출 할 수 있습니다.
소스에는 구조체가 있고, int 및 문자열이있는 목록이 있습니다.
먼저 참조없이 물마루를 내려 봤는데, 그게 효과가있는 것처럼 보였지만, 누락 된 참조로 인해 대상이 비어있었습니다.
(코드가 누구인지 알고 싶다면 알려주세요).
는 지금은 이제 제 2의 시도를 : 그것은 올바른 방법 인 경우 나는 확실하지 않다, 내가 클래스 작품 단계별 목표에 적절한 장소,에 값을 복사하는 데 문제가. 긴급 해결책이 필요하다면 도와주세요. 그리고 클래스 원본을 기존 대상에 복사하는 경우 (항목이 같은 구조체에있는 경우)
클래스 원본과 클래스 대상 자체에 영향을주지 않으므로 전혀 다른 제안을하지 마십시오. 값과 하위 클래스를 복사합니다.
내 코드는 여기까지입니다.
void refcopyObject(ref object source,ref object target,object svalue,object tvalue)
{
if (source != null && target != null)
{
if (source.GetType() == (typeof(string)))
{
target = source;
}
else
if (source.GetType() == (typeof(int)))
{
target = source;
}
else
if (source.GetType() == (typeof(IntPtr)))
{
target = source;
}
else
{
FieldInfo[] fifsource = source.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public); // | BindingFlags.NonPublic
FieldInfo[] fiftarget = target.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public); // | BindingFlags.NonPublic
if (fifsource.Length > 0)
{
for (int i = 0; i < fifsource.Length; i++)
{
if (fifsource.GetType() == fiftarget.GetType())
{
if (i < fiftarget.Length)
{
object psource = source.GetType().GetFields();
object ptarget = target.GetType().GetFields();
object vsource = source.GetType().GetFields().GetValue(source);
object vtarget = target.GetType().GetFields().GetValue(target);
refcopyObject(ref psource, ref ptarget, vsource, vtarget);
}
}
}
}
else
{
//Unten angekommen
copySubObject(ref source, ref target, svalue, tvalue);
////So gehts nicht, dann wird die Referenz wieder verloren
//FieldInfo[] fifs = svalue.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public); // | BindingFlags.NonPublic
//if (fifs.Length > 0)
//{
// FieldInfo[] fift = tvalue.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public); // | BindingFlags.NonPublic
// for (int i = 0; i < fifs.Length; i++)
// {
// if (fifs.GetType() == fift.GetType())
// {
// if (i < fift.Length)
// {
// object psource = svalue.GetType().GetFields().GetValue(svalue);
// object ptarget = tvalue.GetType().GetFields().GetValue(tvalue);
// if (ptarget == null)
// {
// //Ganz unten angekommen, Problem bei Listen
// if (psource.GetType() == (typeof(string)))
// {
// tvalue.GetType().GetFields().SetValue(tvalue,psource);
// }
// if (psource.GetType() == (typeof(int)))
// {
// tvalue.GetType().GetFields().SetValue(tvalue, psource);
// }
// }
// else
// {
// refcopyObject(ref psource, ref ptarget, null, null);
// }
// }
// }
// }
//}
}
}
}
}
내가 의견 시작 어디에 문제가 시작 추측 : 클래스와 서브 클래스 작동을 통해 협력 문제 (오른쪽 장소) 값을 설정 있습니다. 그 부분에 문자열이나 int를 포함하는 구조체 또는 목록을 가져 왔습니다.
고마워요!
빠른 회신
당신은 그 모든'ref'를 필요로하지 않습니다. 약간의 공간이 필요합니다. –
비슷한 질문 : [당신은 닷넷 (C# 구체적)에서 어떻게 개체를 깊은 복사합니까?] (http://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy- an-object-in-net-c-specific) –