У меня есть список одноразовых предметов, которые я добавляю в коллекцию, которая уже содержит ряд одноразовых предметов.Я обертываю код в блоке try ... finally, чтобы при возникновении исключения при копировании элементов из списка в коллекцию все объекты в списке корректно удалялись:
private static void LoadMenuItems(ApplicationMenu parent)
{
List<ApplicationMenuItem> items = null;
try
{
items = DataContext.GetMenuItems(parent.Id);
foreach (var item in items)
{
parent.Items.Add(item);
}
items = null;
}
finally
{
if (items != null)
{
foreach (var item in items)
{
item.Dispose();
}
}
}
}
Если после добавления ряда объектов в коллекцию возникает исключение, у меня будет ситуация, когда коллекция содержит некоторые удаленные объекты.Что может привести к тому, что эти удаленные объекты будут утилизированы снова в следующем блоке try ... catch:
try
{
// Assume that menu.Items contains some items prior
// to the call to LoadMenuItems.
LoadMenuItems(menu);
}
catch
{
// The Dispose() iterates through menu.Items calling
// Dispose() on each.
menu.Dispose();
}
Итак, что я ищу, чтобы найти возможные решения, чтобы остановить вызов Dispose () дважды.Я имею в виду решение, но подумал, что дам его сообществу, чтобы посмотреть, есть ли альтернативы.