Warum funktioniert dies Mit() geben mir ein Fehler?
Ich versuche zu öffnen (Hunderte eigentlich) excel-Datei(en). Ich öffnen Sie die Anwendung, wollen aber die Verwendung der Using () - Funktionen um die einzelnen Arbeitsmappen, die ich öffne. Warum dies resultiert in einem Fehler?
using (Excel.Workbook wbXL = appXL.Workbooks.Open(_sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly))
{
//stuff with wbXL
}
Verwendung wird das rot Unterstrichen und sagt "Microsoft.Office.Interop.excel.Arbeitsmappe':Typ verwendet, in einer Anweisung verwenden, müssen implizit konvertierbar " - System.IDisposable'.
Wie diese Arbeit zu machen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ziemlich viel, was es sagt - kann man nur
using
mit Klassen, die IDisposable implementieren, so dass unter der Haube der compiler weiß, welche Funktion aufgerufen wird, die auf Abschluss -yourclass.Dispose()
. Der Excel-interop-Klassen nicht umzusetzen.Also du hast zwei Möglichkeiten:
Schreiben Sie Ihre eigene wrapper-Klasse für Excel.Arbeitsmappe implementiert IDispose und entweder zeigt das Objekt selbst zu rufen Methoden auf, oder wickelt diese Methoden auch z.B.
Implementieren
using
von sich aus, z.B.wbXL.Close(Excel.XlSaveAction.xlDoNotSaveChanges, workbookToClose);
wenn ich fertig bin mit meinem wbXL. Dies ist ausreichend für die GC? Eine using-Anweisung wäre nicht "besser"?Jedes Element in einem
using
- Anweisung implementieren mussIDisposable
- Schnittstelle. Ich habe nicht die Unterlagen zur hand, aber ich SchätzeExcel.Workbook
nicht implementieren diese Schnittstelle.using-Anweisung (C# - Referenz):
Excel.Workbook
nicht implementiertIDisposable
, so dass Sie nicht verwenden könnenusing
für ihn..Können Sie nicht machen, damit es funktioniert.
Den
using
- block wird verwendet, um Ressourcen freizugeben, die von Objekten, die Umsetzung desIDisposable
Schnittstelle so schnell und sicher wie möglich.Excel.Workbook
nicht implementiertIDisposable
so können Sie nicht erklären, es für die Verwendung in einerusing
block.