Ошибка компилятора CS0173

Невозможно определить тип условного выражения, поскольку неявного преобразования между "class1" и "class2" не существует

Преобразование между классами является целесообразным при работе объектов различных классов с одним кодом. Однако два класса, действующие совместно, не могут поддерживать взаимные и избыточные преобразования, но могут поддерживать неявные преобразования. Типы class1 и class2 определяются независимо, и наиболее общий тип выбирается в качестве типа условного выражения. Дополнительные сведения об определении типов см. на странице Условный оператор не выполняет неявное приведение.

Для исправления ошибки CS0173 убедитесь в наличии только одного неявного преобразования между class1 и class2 независимо от его направления и класса, в котором оно выполняется. Дополнительные сведения см. в разделах Операторы пользовательского преобразования и Встроенные числовые преобразования.

Пример

Следующий пример создает ошибку компилятора CS0173:

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);
   }
}
class M
{
    static int Main ()
    {
        int X = 1;
        // The following line causes CS0173.
        object o = (X == 0) ? null : null;
        return -1;
    }
}