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

  1. Crie um novo método de extensão para o tipo no qual você precisa invocá-lo, ou
  2. 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