CS0034 de erro do compilador

Mensagem de erro

Operador 'operador' é ambíguo em operandos do tipo 'tipo' e 'type2'

Um operador foi usado em dois objetos e o compilador encontrado mais de uma conversão.Como conversões que ser exclusivo, você ou ter para fazer uma projeção de ou para fazer uma das conversões explícitas.Para obter mais informações, consulte Operadores de conversão (Guia de programação C#).

O exemplo a seguir gera CS0034:

// CS0034.cs
public class A
{
   // allows for the conversion of A object to int
   public static implicit operator int (A s)
   {
      return 0;
   }

   public static implicit operator string (A i)
   {
      return null;
   }
}

public class B
{
   public static implicit operator int (B s)
   // one way to resolve this CS0034 is to make one conversion explicit
   // public static explicit operator int (B s)
   {
      return 0;
   }

   public static implicit operator string (B i)
   {
      return null;
   }

   public static implicit operator B (string i)
   {
      return null;
   }

   public static implicit operator B (int i)
   {
      return null;
   }
}

public class C
{
   public static void Main ()
   {
      A a = new A();
      B b = new B();
      b = b + a;   // CS0034
      // another way to resolve this CS0034 is to make a cast
      // b = b + (int)a;
   }
}

Em translation from VPE for Csharp 1.1 um bug de compilador tornou possível definir uma classe que tenha conversões implícitas definida pelo usuário em ambos os int e boole usar um operador bit a bit AND () operador&) em objetos desse tipo. Esse bug foi corrigido para que o compilador em conformidade com a especificação translation from VPE for Csharp translation from VPE for Csharp 2.0, e, portanto, o código a seguir causará agora CS0034:

namespace CS0034
{
    class TestClass2
    {
        public void Test()
        {
            TestClass o1 = new TestClass();
            TestClass o2 = new TestClass();
            TestClass o3 = o1 & o2; //CS0034
        }
    }

    class TestClass
    {
        public static implicit operator int(TestClass o)
        {
            return 1;
        }

        public static implicit operator TestClass(int v)
        {
            return new TestClass();
        }

        public static implicit operator bool(TestClass o)
        {
            return true;
        }
    }

    
}