コンパイラ エラー CS1674

'T': using ステートメントで使用される型は、暗黙的に 'System.IDisposable' への変換が可能でなければなりません

using ステートメントは、using ブロックの最後で、オブジェクトが確実に破棄されることを目的としています。そのため、このステートメントでは、破棄可能な型のみ使うことができます。 たとえば、値型は破棄できません。また、クラスに制約されない型パラメーターも、破棄可能な型とは見なされません。

例 1

次の例では CS1674 が生成されます。

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

例 2

次の例では 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()) {}  
   }  
}  

例 3

次の例は、未知の型パラメーターを破棄可能として扱う場合にクラス型制約が必要になるケースを示しています。 次の例では 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  
   }  
}