CS0173 de erro do compilador

Tipo de expressão condicional não pode ser determinado porque não há nenhuma conversão implícita entre 'class1' e 'class2'

Conversões entre as classes são úteis quando desejar que os objetos de classes diferentes para trabalhar com o mesmo código.No entanto, duas classes que trabalham em conjunto não podem ter conversões mútuas e redundantes ou não há conversões implícitas.Os tipos de class1 e class2 são determinadas de forma independente, e o tipo mais geral está selecionado como o tipo da expressão condicional.Para obter mais informações sobre como os tipos são determinados, consulte operador condicional não pode ser convertido implicitamente.

Para resolver CS0173, verifique se há somente uma conversão implícita entre class1 e class2, independentemente de qual direção a conversão está no e independentemente da classe que a conversão é no.Para obter mais informações, consulte Tabela de conversões numérico implícito (referência de C#) e Operadores de conversão (guia de programação do C#).

Exemplo

O exemplo a seguir gera CS0173:

// CS0173.cs
public class C {}

public class A 
{
    //// The following code defines an implicit conversion operator from  
    //// type C to type A.
    //public static implicit operator A(C c)
    //{
    //    A a = new A();
    //    a = c;
    //    return a;
    //}
}

public class MyClass
{
    public static void F(bool b)
    {
        A a = new A();
        C c = new C();

        // The following line causes CS0173 because there is no implicit
        // conversion from a to c or from c to a.
        object o = b ? a : c;

        // To resolve the error, you can cast a and c.
        //object o = b ? (object)a : (object)c;

        // Alternatively, you can add a conversion operator from class C to
        // class A, or from class A to class C, but not both.
    }

   public static void Main()
   {
      F(true);
   }
}

O código a seguir não produz CS0173 em Visual Studio de 2005, mas não em versões posteriores.

//cs0173_2.cs
class M
{
    static int Main ()
    {
        int X = 1;
        // The following line causes CS0173 in Visual Studio 2005.
        object o = (X == 0) ? null : null;
        return -1;
    }
}