Compiler Error CS1674

 

Veröffentlicht: Juli 2016

Die neueste Dokumentation zu Visual Studio 2017 RC finden Sie unter Visual Studio 2017 RC Documentation (Dokumentation zu Visual Studio 2017 RC).

"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.

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

Anzeigen: