Freigeben über


Compilerfehler CS0457

Aktualisiert: November 2007

Fehlermeldung

Mehrdeutige benutzerdefinierte Konvertierungen "Konvertierungsmethodenname 1" und "Konvertierungsmethodenname 2" bei der Konvertierung von "Typname 1" in "Typname 2".
Ambiguous user defined conversions 'Conversion method name 1' and 'Conversion method name 2' when converting from 'type name 1' to 'type name 2'

Zwei Konvertierungsmethoden sind anwendbar, und der Compiler kann nicht entscheiden, welche von ihnen angewendet werden soll.

Dieser Fehler kann durch folgendes Szenario verursacht werden:

  • Sie möchten Klasse A in Klasse B konvertieren, wobei A und B nicht aufeinander bezogen sind.

  • A ist von A0 abgeleitet, und es ist eine Methode zur Konvertierung von A0 in B vorhanden.

  • B verfügt über eine Unterklasse B1, und es ist eine Methode zum Konvertieren von A in B1 vorhanden.

Der Compiler gewichtet diese beiden Konvertierungsmethoden gleich, da die erste Konvertierung den besten Zieltyp und die zweite Konvertierung den besten Quelltyp bietet. Da der Compiler keine Auswahl treffen kann, wird dieser Fehler generiert. Um ihn zu beheben, schreiben Sie eine neue explizite Methode zum Konvertieren von A in B.

Ein weiteres Szenario für diesen Fehler liegt vor, wenn zwei Methoden zum Konvertieren von A in B vorhanden sind. Geben Sie durch eine explizite Typumwandlung an, welche Konvertierung verwendet werden soll, um den Fehler zu beheben.

Beispiel

Im folgenden Beispiel wird CS0457 generiert.

// CS0457.cs
using System;
public class A { }

public class G0 {  }
public class G1<R> : G0 {  }

public class H0 {
   public static implicit operator G0(H0 h) {
      return new G0();
   }
}
public class H1<R> : H0 {
   public static implicit operator G1<R>(H1<R> h) {
      return new G1<R>();
   }
}

public class Test 
{
   public static void F0(G0 g) {  }
   public static void Main() 
   {
      H1<A> h1a = new H1<A>();
      F0(h1a);   // CS0457
   }
}