Donné ce bout de code:Le débogueur VS2008 conserve-t-il les objets hors champ?
// 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();
}
Avant la ligne avec la déclaration Liste changedRows, changedRows est nul, comme cela devrait être. Il devient alors hors de portée, comme vous obtenez le prochain élément de travail. Vous revenez ensuite, et avant cette même ligne, si vous accédez à changedRows, il devrait être à nouveau nul, car il n'a pas été déclaré.
Si vous cassez et modifiez, comme prévu, vous ne pouvez pas accéder à changedRows, car il est hors de portée, et n'a pas encore été déclaré. Si vous l'évaluez (soit par le survol de la souris, soit en utilisant la fenêtre immédiate), vous avez accès aux changedRows de l'itération précédente de la boucle. WTH?
Vous avez vu ça? Il n'affecte pas le programme car il semble agir correctement dans le code, mais le problème du débogueur a causé une perte de temps car il ne se comportait pas comme prévu. Je me demandais si c'était un comportement attendu ou non, afin que je puisse savoir à l'avenir et ne pas perdre de temps avec elle.