CS1674 de erro do compilador

Mensagem de erro

' U ': tipo usado em um usando demonstrativo deve ser implicitamente conversível em 'sistema.IDisposable'

The usando demonstrativo destina-se a ser usado para garantir o descarte de um objeto no participante o using bloquear, assim, somente os tipos que são descartáveis poderão ser usados em uma demonstrativo de tal. Por exemplo, tipos de valor não são descartáveis e parâmetros de tipo que não estão restrito a ser classes não podem ser presumidos seja descartável.

Exemplo

O exemplo a seguir gera CS1674.

// CS1674.cs
class C
{
   public static void Main()
   {
      int a = 0;
      a++;

      using (a) {}   // CS1674
   }
}

O exemplo a seguir gera CS1674.

// CS1674_b.cs
using System;
class C {
   public void Test() {
      using (C c = new C()) {}   // CS1674
   }
}

// OK
class D : IDisposable {
   void IDisposable.Dispose() {}
   public void Dispose() {}

   public static void Main() {
      using (D d = new D()) {}
   }
}

O caso seguinte ilustra a necessidade de uma restrição de tipo de classe garantir que um parâmetro de tipo desconhecido é descartável.O exemplo a seguir gera CS1674.

// CS1674_c.cs
// compile with: /target:library
using System;
public class C<T>
// Add a class type constraint that specifies a disposable class.
// Uncomment the following line to resolve.
// public class C<T> where T : IDisposable
{
   public void F(T t)
   {
      using (t) {}   // CS1674
   }
}