Freigeben über


Compilerfehler CS0121

Der Aufruf ist für die folgenden Methoden oder Eigenschaften nicht eindeutig: „Methode1“ und „Methode2“

Aufgrund der impliziten Konvertierung war der Compiler nicht in der Lage, eine Form einer überladenen Methode aufzurufen. Sie haben verschiedene Möglichkeiten zur Behebung dieses Fehlers:

  • Geben Sie die Methodenparameter so an, dass keine implizite Konvertierung stattfindet.
  • Entfernen Sie alle Überladungen für die Methode.
  • Führen Sie vor dem Methodenaufruf eine Umwandlung in den richtigen Typ durch.
  • Verwenden Sie benannte Argumente.

Beispiel 1

Die folgenden Beispiele führen zum Compilerfehler CS0121:

public class Program
{
    static void f(int i, double d)
    {
    }

    static void f(double d, int i)
    {
    }

    public static void Main()
    {
        f(1, 1);   // CS0121

        // Try the following code instead:
        // f(1, 1.0);
        // or
        // f(1.0, 1);
        // or
        // f(1, (double)1);   // Cast and specify which method to call.
        // or
        // f(i: 1, 1);
        // or
        // f(d: 1, 1);

        // f(i: 1, d: 1); // This still gives CS0121
    }
}

Beispiel 2

class Program2
{
    static int ol_invoked = 0;

    delegate int D1(int x);
    delegate T D1<T>(T x);
    delegate T D1<T, U>(U u);

    static void F(D1 d1) { ol_invoked = 1; }
    static void F<T>(D1<T> d1t) { ol_invoked = 2; }
    static void F<T, U>(D1<T, U> d1t) { ol_invoked = 3; }

    static int Test001()
    {
        F(delegate(int x) { return 1; }); // CS0121
        if (ol_invoked == 1)
            return 0;
        else
            return 1;
    }

    static int Main()
    {
        return Test001();
    }
}