컴파일러 오류 CS1674

'T': using 문에 사용된 형식은 암시적으로 'System.IDisposable'로 변환할 수 있어야 합니다.

using 문은 using 블록의 끝에서 개체를 삭제하기 위한 것이므로 이 문에는 삭제 가능한 개체만을 사용해야 합니다. 예를 들어, 값 형식은 삭제 가능하지 않으며, 클래스로 제한되지 않는 형식 매개 변수의 경우 삭제 가능으로 간주되지 않을 수도 있습니다.

예제

다음 샘플에서는 CS1674 오류가 발생하는 경우를 보여 줍니다.

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

      using (a) {}   // CS1674
   }
}

다음 샘플에서는 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()) {}
   }
}

다음 예에서는 알 수 없는 형식 매개 변수가 삭제 가능하도록 하기 위해 클래스 형식 제약 조건이 필요한 경우를 보여 줍니다. 다음 샘플에서는 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
   }
}