0

我正在尝试通过实现 IDisposable 接口来创建一次性 ADOX Catalog 实例,但我收到一个错误,即:ADOX.Catalog' does not contain a definition for 'Dispose' and no extension method 'Dispose'接受第一个参数类型'可以找到 ADOX.Catalog'(您是否缺少 using 指令或程序集引用?)

这是我的代码

namespace Disposable
{
class DBGen : IDisposable
{
    Catalog cat; 
    public DBGen()
    {
        cat = new Catalog();
        cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=D:\\AccessDB\\NewMDB.mdb;" +"Jet OLEDB:Engine Type=5");
        Console.WriteLine("Database Created Successfully");
        cat = null;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool b)
    {
        if (b)
        {
            cat.Dispose();
        }
    }
}

}

我收到错误消息

   cat.Dispose();

你能告诉我为什么会这样吗?坦斯克

4

1 回答 1

0

该字段cat似乎在构造函数中设置为空,因此它一直为空。尝试在将其设置为 null 之前处理“cut”。

如果您要cat在类中的其他地方使用 somwhere,则应从构造函数中删除 cat=null;并重写 dispose,如下所示:

public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool b)
    {
        if (b)
        {
            if (cat!=null) {
                var disposableCat = cat as IDisposable;
                if (disposableCat != null) {
                   disposableCat.Dispose();
                   cat=null;
                }
            }
        }
    }
于 2012-07-21T06:22:55.887 回答