为什么这个Using()会给我一个错误
本文关键字:一个 错误 为什么 Using | 更新日期: 2023-09-27 18:06:34
我试图打开一个(实际上是数百)excel文件。我打开应用程序,但希望在打开的每个工作簿周围使用Using()功能。为什么这会导致错误?
using (Excel.Workbook wbXL = appXL.Workbooks.Open(_sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly))
{
//stuff with wbXL
}
using用红色下划线表示" Microsoft.Office.Interop.excel。"工作簿":在using语句中使用的类型必须隐式转换为"System.IDisposable"。
如何使这个工作?
差不多就是它说的——你只能在实现IDisposable的类中使用using
,这样编译器就知道在结束时调用哪个函数了——yourclass.Dispose()
。Excel的互操作类没有实现这个。
你有两个选择:
-
为Excel编写自己的包装器类。实现iddispose的工作簿,或者公开对象本身以调用方法,或者也包装这些方法,例如
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
没有实现这个接口。
using Statement (c# Reference):
提供方便的语法,确保正确使用IDisposable对象。
Excel.Workbook
没有实现IDisposable
,所以你不能使用using
.
你不能让它工作。
using
块用于尽可能快速安全地从实现IDisposable
接口的对象中释放资源。
Excel.Workbook
没有实现IDisposable
,所以你不能在using
块中声明它。
Businessmanger emb = new Businessmanger();
try
{
TempData["deparmentList"] = Deplist;
return PartialView("create");
}
catch (Exception)
{
throw;
}
finally {
//object dispose here
((IDisposable)emb).Dispose();
}