Erro do Compilador CS1929
'typeB' não contém uma definição para 'method' e a melhor sobrecarga de método de extensão 'typeC.method' requer um receptor do tipo 'typeA'
Esse erro é gerado quando você tenta invocar um método de extensão de uma classe que ele não estende. No exemplo mostrado aqui, o método de extensão é definido para a classe derivada D
, mas não para a classe base B
.
Para corrigir este erro
- Crie um novo método de extensão para o tipo no qual você precisa invocá-lo, ou
- mova a chamada para um objeto do tipo que o método existente estende.
Exemplo
O código a seguir gera CS1929:
static class Extension
{
public static void ExtensionMethod(this D d)
{
}
}
class D : B
{
}
class B
{
static void Main()
{
B b = new B();
b.ExtensionMethod(); // CS1929
}
}
O código a seguir resolve o CS1929 conforme descrito em 1. - criando um novo método de extensão para o tipo adequado "B":
static class Extension
{
public static void ExtensionMethod(this D d)
{
}
public static void NewExtensionMethod(this B b)
{
}
}
class D : B
{
}
class B
{
static void Main()
{
B b = new B();
b.NewExtensionMethod();
}
}
O código a seguir resolve o CS1929 conforme descrito em 2. - migrando a chamada para um objeto do tipo apropriado 'D':
static class Extension
{
public static void ExtensionMethod(this D d)
{
}
}
class D : B
{
}
class B
{
static void Main()
{
D d = new D();
d.ExtensionMethod();
}
}
Confira também
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