Bu kod pasajını Verilen: olması gerektiği gibi beyan Liste changedRows doğrultusunda önceVS2008 hata ayıklayıcısı kapsam dışı nesnelerin üzerine mi tutuluyor?
// 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();
}
, changedRows, null. Sonraki iş öğelerini aldığınızda kapsam dışıdır. Daha sonra geri dönersiniz ve aynı satırdan önce, değiştirilen satırlara erişirseniz, bildirilmemesi gerektiği için tekrar boş olmalıdır.
Kesin ve düzenlerseniz, beklediğiniz gibi, değişkenin Altına erişemezsiniz, çünkü kapsam dışıdır ve henüz bildirilmemiştir. Eğer bunu değerlendirirseniz (fare ile veya hemen pencereyi kullanarak), döngünün önceki yinelemesinden değiştirilen satırlara erişebilirsiniz. WTH?
Bunu gören oldu mu? Program, kodu doğru bir şekilde göründüğü gibi etkilemez, ancak hata ayıklayıcı sorunu beklendiği gibi davranmadığından zaman kaybı yaratır. Bu beklenen bir davranış olup olmadığını merak ediyordum, bu yüzden gelecekte de anlayabiliyordum ve onunla zaman harcamam.