为什么这个Using()会给我一个错误?
我正在尝试打开(几百个)excel文件。 我打开该应用程序,但希望在打开的每个工作簿周围使用Using()function。 为什么这会导致错误?
using (Excel.Workbook wbXL = appXL.Workbooks.Open(_sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly)) { //stuff with wbXL }
使用获取红色下划线,并说“'Microsoft.Office.Interop.excel.Workbook':使用using语句中的types必须隐式转换为'System.IDisposable'。
如何使这项工作?
几乎所说的 – 你只能使用实现IDisposable的类来using
,所以在编译器的封面下,编译器知道哪个函数需要调用finalization – yourclass.Dispose()
。 Excel互操作类不执行此操作。
所以你有两个select:
-
编写你自己的包装类,用于实现IDispose的Excel.Workbook,并且暴露对象本身以调用方法,或者封装这些方法,例如
public class DisposableWorkbook : IDisposable { private Excel.Workbook _workbook = null; public DisposableWorkbook(Excel.Application appXL, String path, NotSureOfType otherArgument, Excel.XlFileAccess access) { _workbook = appXL.Workbooks.Open(path, otherArgument, access); } public Excel.Workbook Workbook { get { return _workbook; } } public void Dispose() { if (workbook != null) { workbook.Close(Excel.XlSaveAction.xlDoNotSaveChanges, workbookToClose); workbook = null; } } } using (DisposableWorkbook dwbXL = new DisposableWorkbook(appXL, _sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly)) { Excel.Workbook wbXL = dwbXL.Workbook; // stuff with wbXL }
-
using
你自己,例如Excel.Workbook wbXL = null; try { wbxl = appXL.Workbooks.Open(_sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly); //stuff with wbXL } finally { if (wbxl != null) wbxl.Close(); }
using
语句中的任何项都必须实现IDisposable
接口。 我没有收到文档,但我猜Excel.Workbook
不会实现这个接口。
使用语句(C#参考) :
提供一个方便的语法来确保正确使用IDisposable对象。
Excel.Workbook
不实现IDisposable
,所以你不能使用它。
你不能使它工作。
using
块用于尽可能快速和安全地从实现IDisposable
接口的对象中释放资源。
Excel.Workbook
不实现IDisposable
所以你不能声明它用于使用块。
Businessmanger emb = new Businessmanger(); try { TempData["deparmentList"] = Deplist; return PartialView("create"); } catch (Exception) { throw; } finally { //object dispose here ((IDisposable)emb).Dispose(); }