Freigeben über


Compilerfehler CS1929

'typeB' enthält keine Definition für „Methode“ und die beste Erweiterungsmethodeüberladung „typeC.method“ erfordert einen Empfänger vom Typ „typeA“

Dieser Fehler wird generiert, wenn Sie versuchen, eine Erweiterungsmethode über eine Klasse aufzurufen, die sie nicht erweitert. Im hier gezeigten Beispiel wird die Erweiterungsmethode für die abgeleitete Klasse Ddefiniert, jedoch nicht für die Basisklasse B.

So beheben Sie diesen Fehler

  1. Erstellen Sie eine neue Erweiterungsmethode für den Typ, in dem Sie diese aufrufen müssen oder
  2. verschieben Sie den Aufruf in ein Objekt des Typs, den die vorhandene Methode erweitert.

Beispiel

Mit dem folgenden Code wird CS1929 generiert:

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
    }
}

Der folgende Code löst das CS1929 wie in 1 beschrieben. - durch Erstellen einer neuen Erweiterungsmethode für den richtigen Typ „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();
    }
}

Der folgende Code löst das CS1929 wie in 2 beschrieben. - Verschieben des Aufrufs in ein Objekt des richtigen Typs „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();
    }
}

Siehe auch