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