这不是我的代码,我只需了解它。无法联系到原始程序员。 dobj只是一种对象类型。 我的主要问题是:当dobj从未改变时,为什么他会再次反序列化? 请忽略他所有的goto,因为他们现在无处不在。
////////////////////////
//Deserialize Original//
////////////////////////
dobj = Generics.IO.BinarySerializer.Open(g_PathToTMP);
if (dobj == null)
{
///////
//LOG//
///////
goto Label_Done;
}
dccmcaltered = dobj as ASM001.MatSettings;
if (dccmcaltered == null)
goto Label_Done;
//
//////////////////////////////////////////
//Apply Changes To Deserialized Original//
//////////////////////////////////////////
dccmcaltered.ObjectLocation = wpuiobj.ObjectLocation;
dccmcaltered.ObjectOffset = wpuiobj.ObjectOffset;
dccmcaltered.UserDefinedLocation = wpuiobj.UserDefinedLocation;
dccmcaltered.Locked = wpuiobj.Locked;
dccmcaltered.RinseLocation = wpuiobj.RinseLocation;
dccmcaltered.RinseDepth = wpuiobj.RinseDepth;
dccmcaltered.DrainLocation = wpuiobj.DrainLocation;
dccmcaltered.DrainDepth = wpuiobj.DrainDepth;
//
////////////////////////
//Deserialize Original//Why did we need to Deserialize again
////////////////////////
dobj = Generics.IO.BinarySerializer.Open(g_PathToTMP);
if (dobj == null)
{
///////
//LOG//
///////
goto Label_Done;
}
dccmcoriginal = dobj as ASM001.MatSettings;
if (dccmcoriginal == null)
goto Label_Done;
//
bResult = Generics.IO.SerializerPlus.IsBinaryEqual(dccmcoriginal, dccmcaltered);
Label_Done:
;
bCurrent = bResult;
///////////
//Cleanup//
///////////
FileInfo fInfo = new FileInfo(g_PathToTMP);
if (fInfo.Exists)
fInfo.Delete();
//
System.Diagnostics.Debug.WriteLineIf(!bCurrent && g_bVerbose, "[Main] Mat is not Current [ASM = 1]!");
System.Diagnostics.Debug.WriteLineIf(bCurrent && g_bVerbose, "[Main] Mat is Current! [ASM = 0]");
修改我添加了方法的其余部分
答案 0 :(得分:4)
为什么在dobj从未改变时他再次反序列化?
dobj
引用的对象 已更改。无论您是通过dobj
还是dccmcaltered
:
dccmcaltered = dobj as ASM001.MatSettings;
这只是对同一个对象;
的不同类型引用dccmcaltered.ObjectLocation = wpuiobj.ObjectLocation;
dccmcaltered.ObjectOffset = wpuiobj.ObjectOffset;
dccmcaltered.UserDefinedLocation = wpuiobj.UserDefinedLocation;
dccmcaltered.Locked = wpuiobj.Locked;
现在:价值已经改变。
请注意,dccmcaltered
会保留对此原始对象的引用,因此即使在为dobj
分配了不同的对象后,这些更改仍可访问。
答案 1 :(得分:2)
稍后他会想要比较未更改的版本和更新的版本。 首先,他将反序列化为dccmcaltered,并设置一些属性。 然后他将反序列化为dccmcoriginal而不设置这些属性。
很高兴我不必保持这个...... 祝你好运!
是的,比较是(aargh): bResult = Generics.IO.SerializerPlus.IsBinaryEqual(dccmcoriginal,dccmcaltered);所以你可以删除所有关于dccmcoriginal, 并在实际更改之前验证属性是否需要更改。
答案 2 :(得分:0)
因为他首先用dobj
这样的行改变反序列化的对象dccmcaltered.ObjectLocation = wpuiobj.ObjectLocation;
,所以他输掉了#34;原来的" dccmcaltered.ObjectLocation
值和"恢复"他们(进入另一个对象)进行第二次反序列化......奇怪的人......干杯