Compilerfehler CS1674

"T": Der in einer using-Anweisung verwendete Typ muss implizit in "System.IDisposable" konvertiert werden können.

Die using-Anweisung soll verwendet werden, um die Freigabe eines Objekts am Ende eines using-Blocks zu gewährleisten. Es können also nur Typen, die freigegeben werden können, in so einer Anweisung verwendet werden. Beispielsweise können Wertypen nicht freigegeben werden, und Typparameter, die nicht darauf beschränkt sind, Klassen zu sein, können nicht als freigebbar erachtet werden.

Beispiel

Im folgenden Beispiel wird CS1674 generiert.

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

      using (a) {}   // CS1674
   }
}

Im folgenden Beispiel wird CS1674 generiert.

// 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()) {}
   }
}

Im folgenden Fall wird die Notwendigkeit einer Klassentypeinschränkung veranschaulicht, damit ein unbekannter Typparameter freigebbar ist. Im folgenden Beispiel wird CS1674 generiert.

// 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
   }
}