diesen Code-Snippet Gegeben:Behält der VS2008-Debugger Objekte außerhalb des Gültigkeitsbereichs?
// Get first key //
int? keyEDISecurity = this.WorkQueue.GetNextWorkItem();
// Done? //
while (keyEDISecurity != null)
{
try
{
...
// Write changes //
List<ISNLEditableObject> changedRows = this.WorkQueue.GetChangedRows((int)keyEDISecurity);
this.Writer.Write(changedRows, WriteFlags.Transactional);
...
}
catch (Exception ex)
{
// Exception handling/logging code
}
finally
{
// Remove all data for the KeyEDISecurity from work queue cache //
this.WorkQueue.RemoveData((int)keyEDISecurity);
}
// Get next work item //
keyEDISecurity = this.WorkQueue.GetNextWorkItem();
}
vor der Zeile mit der Deklarationsliste changedRows ist changedRows null, wie es sein sollte. Es geht dann außer Reichweite, wenn Sie das nächste Arbeitselement erhalten. Dann kommst du zurück und vor dieser Zeile solltest du, wenn du auf "changedRows" zugreifst, wieder Null sein, da es nicht deklariert wurde.
Wenn Sie brechen und bearbeiten, dann können Sie wie erwartet nicht auf "changedRows" zugreifen, da der Gültigkeitsbereich überschritten wurde und noch nicht deklariert wurde. Wenn Sie es auswerten (entweder durch MouseOver oder mithilfe des unmittelbaren Fensters), haben Sie Zugriff auf die geändertenRows der vorherigen Iteration der Schleife. WTH?
Wer hat das gesehen? Es wirkt sich nicht auf das Programm aus, da es im Code korrekt zu funktionieren scheint, aber das Debugger-Problem verursachte Zeitverschwendung, da es sich nicht wie erwartet verhalten hat. Ich habe mich gefragt, ob das erwartetes Verhalten war oder nicht, damit ich es in Zukunft wissen und keine Zeit damit verschwenden könnte.