컴파일러 오류 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  
   }  
}