Partager via


Erreur du compilateur CS1674

Mise à jour : novembre 2007

Message d'erreur

'T' : le type utilisé dans une instruction using doit être convertible implicitement en 'System.IDisposable'
'T': type used in a using statement must be implicitly convertible to 'System.IDisposable'

L'instruction using doit être utilisée pour garantir la suppression d'un objet à la fin du bloc using ; par conséquent, seuls les types pouvant être supprimés peuvent être utilisés dans ce type d'instruction. Par exemple, les types valeur ne peuvent pas être supprimés, et les paramètres de type qui ne sont pas contraints à être des classes ne peuvent pas être considérés comme pouvant être supprimés.

Exemple

L'exemple suivant génère l'erreur CS1674.

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

      using (a) {}   // CS1674
   }
}

L'exemple suivant génère l'erreur 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()) {}
   }
}

Le cas suivant illustre le besoin d'une contrainte de type classe pour garantir qu'un paramètre de type inconnu peut être supprimé. L'exemple suivant génère l'erreur 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
   }
}