Поделиться через


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

Обновлен: Ноябрь 2007

Сообщение об ошибке

Невозможно определить тип условного выражения, поскольку неявного преобразования между "class1" и "class2" не существует
Type of conditional expression cannot be determined because there is no implicit conversion between 'class1' and 'class2'

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

Для исправления ошибки CS0173 убедитесь в наличии только одного неявного преобразования между class1 и class2 независимо от его направления и класса, в котором оно выполняется. Дополнительные сведения см. в разделе Таблица неявных числовых преобразований (Справочник по C#) и Операторы преобразования (Руководство по программированию в C#).

Пример

В следующем примере возникает ошибка CS0173.

// CS0173.cs
public class C {}
public class A {}

public class MyClass
{
   public static void F(bool b)
   {
      A a = new A();
      C c = new C();
      object o = b ? a : c;  // CS0173
   }

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

Следующий код приводит к возникновению ошибки CS0173 в Microsoft Visual Studio 2008, но не в Visual Studio 2005.

//cs0173_2.cs
class M
{

static int Main ()
{
              int X = 1;
        object o = (X == 0) ? null : null; //CS0173
        return -1;
}
}