Partager via


Erreur du compilateur CS0457

Mise à jour : novembre 2007

Message d'erreur

Conversions définies par l'utilisateur ambiguës 'Nom de méthode de conversion 1' et 'Nom de méthode de conversion 2' lors de la conversion de 'nom de type 1' en 'nom de type 2'
Ambiguous user defined conversions 'Conversion method name 1' and 'Conversion method name 2' when converting from 'type name 1' to 'type name 2'

Deux méthodes de conversion sont applicables et le compilateur est incapable de déterminer la méthode à utiliser.

L'un des scénarios pouvant provoquer cette erreur est le suivant :

  • Vous souhaitez convertir la classe A en classe B (A et B ne sont pas liés).

  • A est dérivée d'A0, et une méthode permet de convertir A0 en B.

  • B a une sous-classe B1 et une méthode permet de convertir A en B1.

Le compilateur considérera les deux méthodes de façon égale, car la première conversion fournit le meilleur type de destination et la deuxième conversion fournit le meilleur type de source. Puisque le compilateur est incapable de choisir, cette erreur est générée. Pour corriger cette erreur, écrivez une nouvelle méthode explicite convertissant A en B.

Un autre scénario qui provoque cette erreur est le suivant : il existe deux méthodes qui convertissent A en B. Pour corriger cette erreur, spécifiez la conversion à utiliser à l'aide d'un cast explicite.

Exemple

L'exemple suivant génère l'erreur CS0457.

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