Невозможно неявно преобразовать пользовательский тип в IDisposable Error - PullRequest
2 голосов
/ 24 июня 2011

У меня есть этот кусок кода:

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

В переменной conn появляется сообщение об ошибке " Невозможно неявно преобразовать тип DataProvider в System.IDisposable "

DataProvider - это пользовательский класс, созданный кем-то в этом проекте, над которым я работаю. Это тип приведенной выше переменной conn.

Полагаю, мне нужно, чтобы DataProvider реализовывал IDisposable, но я не уверен, действительно ли это здесь проблема или нет, и если мне нужно ее реализовать, с какими неуправляемыми ресурсами возникает проблема, требующая от меня добавления IDisposable?

Вот класс DataProvider: DataProvider.txt

Ответы [ 4 ]

4 голосов
/ 24 июня 2011

С на странице MSDN об использовании оператора .

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

и

Все такие типы должны реализовывать интерфейс IDisposable.

Так что да, вам нужно, чтобы ваш DataProvider реализовывал IDisposable, чтобы использовать его в том виде, в котором вы находитесь в блоке using.

2 голосов
/ 24 июня 2011

DataProvider должен действительно реализовывать IDisposable, поскольку ему принадлежит IDbConnection, который он должен правильно утилизировать.

2 голосов
/ 24 июня 2011

Ключевое слово «using» - это просто полезный способ написания безопасного кода, который будет вызывать Dispose (), когда переменная выходит из области видимости.Если вы не собираетесь вызывать Dispose (), это бесполезно.Эта функция объявлена ​​интерфейсом IDisposable.

Если у вас нет неуправляемых ресурсов, вам все равно не следует использовать «using» для него.

Хорошее описание этогоздесь: http://www.codeproject.com/KB/cs/using_and_IDisposable.aspx

0 голосов
/ 24 июня 2011

Да, чтобы использовать оператор using, объект должен реализовать IDisposable. Я просмотрел немного этого кода и не увидел никакого неуправляемого кода (хотя я мог ошибаться, поскольку там тонна кода).

...