CS0457 de erro do compilador

Mensagem de erro

Nome do tipo definido pelo usuário ambíguo conversões de 'método de conversão name 1 ' e o nome do tipo 'método de conversão nome 2' ao converter de' 1 ' para' 2 '

Dois métodos de conversão são aplicáveis e o compilador não pode decidir qual deles usar.

Um cenário que pode causar esse erro é sistema autônomo segue:

  • Você deseja converter classe A classe B onde A e B são não relacionados.

  • A derivam A0, e há um método que converte de A0 em B.

  • B tem uma subclasse B1 e há um método que converte de A para B1.

O compilador irá ponderar os métodos de conversão de dois igualmente, porque a primeira conversão fornece o melhor tipo de destino e a segunda conversão fornece o melhor tipo de fonte.Uma vez que o compilador será não é possível escolher, esse erro será gerado.Para resolver, escrever um método explícito novo conversão A B.

Outro cenário que causa esse erro é se há dois métodos que convertem ao B.Para corrigir, especifique qual conversão usar por meio de uma conversão explícita.

Exemplo

O exemplo a seguir gera 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
   }
}