VS2010(.NET4)中using语句IDisposable转换错误排查求助
问题根源与解决办法
兄弟,你这错误的原因一眼就能看出来——你把无返回值的OpenConnection()方法直接放进using块里了!using语句的核心要求是:括号里必须是一个实现了System.IDisposable接口的对象实例,而不是一个不返回任何内容的方法调用。
你的父类MyDatabaseContext确实正确实现了IDisposable,子类EmployeeDatabaseContext也顺理成章继承了这个能力,所以正确的做法是把当前的EmployeeDatabaseContext实例(也就是this)放进using块,然后在块内部调用OpenConnection()方法。
修正后的代码
public class EmployeeDatabaseContext : MyDatabaseContext { public EmployeeDatabaseContext(string dataProvider, string connectionString) : base(dataProvider, connectionString) { } public void test() { // 将当前实例放入using块,它继承了IDisposable接口 using (this) { OpenConnection(); // 这里可以添加你的数据库操作逻辑,比如查询、插入等 } } }
如果你觉得直接用this不够直观,也可以显式赋值给变量:
public void test() { using (var dbContext = this) { dbContext.OpenConnection(); // 执行数据库操作 } }
为什么原来的写法不对?
using语句是个语法糖,它会在代码块执行完毕后自动调用对象的Dispose()方法。它的语法规则是:
using (IDisposable 实现类的实例) { // 操作逻辑 }
你之前写的using (OpenConnection()),OpenConnection()是返回void的方法,根本不是一个IDisposable实例,编译器当然会抛出那个类型转换错误。
另外补充一点:你的Dispose()方法已经处理了连接的关闭和释放,所以using块结束时会自动帮你完成这些清理工作,不用手动再调用相关方法啦。
内容的提问来源于stack exchange,提问作者srh
相关产品推荐
相关产品推荐

