Erro do Compilador CS1674
'T': tipo usado em uma instrução using deve ser implicitamente conversível para 'System.IDisposable'
A instrução using destina-se a ser usada para garantir o descarte de um objeto ao final do bloco using
, portanto, somente os tipos que são descartáveis podem ser usados nesse tipo de instrução. Por exemplo, tipos de valor não são descartáveis e parâmetros de tipo que não são restritos a serem classes podem não ser considerados descartáveis.
Exemplo 1
O exemplo a seguir gera o erro CS1674.
// CS1674.cs
class C
{
public static void Main()
{
int a = 0;
a++;
using (a) {} // CS1674
}
}
Exemplo 2
O exemplo a seguir gera o erro 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()) {}
}
}
Exemplo 3
O caso a seguir ilustra a necessidade de uma restrição de tipo de classe para assegurar que um parâmetro de tipo desconhecido é descartável. O exemplo a seguir gera o erro 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
}
}
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de