Почему Resharper жалуется на "Возможное" нулевое "назначение сущности, отмеченной атрибутом" NotNull "" для объектов рабочей таблицы, но не для других?
У меня есть этот код для выпуска некоторых COM-объектов в приложении Excel Interop:
. . .
}
Marshal.ReleaseComObject(_xlSheet);
Marshal.ReleaseComObject(_xlSheets);
_xlBook.Close(false, null, null);
Marshal.ReleaseComObject(_xlBook);
_xlApp.DisplayAlerts = false;
_xlApp.Quit();
OnChanged(EventArgs.Empty);
} // foreach (DataRowView drv in selectedUnits)
Marshal.ReleaseComObject(_xlApp);
В другом месте я также выпускаю использованный там лист:
Marshal.ReleaseComObject(_xlSheetDelPerf);
Это все работает просто отлично, но Resharper Inspect > Code Issues в Solution обнаруживает " возможное" нулевое "назначение для объекта, отмеченного атрибутом NotNull " в двух вызовах ReleaseComObject() для объектов Excel.Worksheet (но не для Sheet, Книга или объекты приложения). Они определены так:
using Excel = Microsoft.Office.Interop.Excel;
. . .
private Excel.Application _xlApp;
private Excel.Workbook _xlBook;
private Excel.Sheets _xlSheets;
private Excel.Worksheet _xlSheet;
private Excel.Worksheet _xlSheetDelPerf;
Что делает Рабочий лист таким [не] особенным? Что еще более важно, я должен удалить код ReleaseComObject() для них? И использовать что-то еще, чтобы освободить их?
Примечание. Принятый ответ на вопрос " Как правильно очистить объекты взаимодействия Excel ", предложенный здесь VVS, с 474 ответами, показывает, что лист освобождается таким образом...?!?
ОБНОВИТЬ
Хорошо, я последовал совету MethodMan (кто бы не стал с таким прозвищем?) И теперь у меня есть:
// Free up resources
Marshal.ReleaseComObject(_xlSheet);
Marshal.ReleaseComObject(_xlSheets);
_xlBook.Close(false, null, null);
Marshal.ReleaseComObject(_xlBook);
_xlApp.DisplayAlerts = false;
_xlApp.Quit();
_xlSheet = null;
_xlSheets = null;
_xlBook = null;
} //if (_xlSheet != null)
OnChanged(EventArgs.Empty);
} // foreach (DataRowView drvu in selectedUnits)
Marshal.ReleaseComObject(_xlApp);
_xlApp = null;
} // try
finally
{
GC.Collect();
}