无法将自定义类型隐式转换为IDisposable错误

时间:2011-06-24 04:35:16

标签: c# exception types idisposable

我有这段代码:

try
{
    using(conn)
    {
         conn.UpdateScheduledTaskGuid(taskID, taskGUID);            
    }
}

conn 变量上我收到错误“无法将类型DataProvider隐式转换为System.IDisposable

DataProvider是我在这个项目中创建的自定义类,它是上面conn变量的类型。

我想我需要让DataProvider实现IDisposable,但我不确定这是否真的存在问题,如果我必须实现它,那么非托管资源是否有问题需要我添加IDisposable?

这是DataProvider类:DataProvider.txt

4 个答案:

答案 0 :(得分:4)

来自the MSDN page about the using Statement

Provides a convenient syntax that ensures the correct use of IDisposable objects.

  

所有这些类型必须实现   IDisposable接口。

所以,是的,你需要让你的DataProvider实现IDisposable来使用它,因为你在使用块中。

答案 1 :(得分:2)

“using”关键字只是一种编写异常安全代码的有用方法,当变量超出范围时会调用Dispose()。如果你不打算调用Dispose(),它就没用了。该函数由IDisposable接口声明。

如果您没有非托管资源,则无论如何都不应该使用“使用”。

这里有一个很好的描述: http://www.codeproject.com/KB/cs/using_and_IDisposable.aspx

答案 2 :(得分:2)

DataProvider必须确实实现IDisposable,因为它拥有IDbConnection,必须妥善处理。

答案 3 :(得分:0)

是的,为了使用'using'语句,对象需要实现IDisposable。我查看了一些代码,我没有看到任何非托管代码(虽然我可能会弄错,因为那里有大量的代码)。