Прочитать на английском

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


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

При использовании определенного пользователем логического оператора ("оператор") как отладочного тип значения, возвращаемого этим оператором, должен совпадать с типом обоих его параметров.

Если вы задаете оператор для определяемого пользователем типа, а затем пытаетесь использовать его как оператор краткой записи, определяемый пользователем оператор должен иметь параметры и возвращаемые значения того же типа. Дополнительные сведения о операторах короткого канала см. в разделе && операторов и || операторов. Дополнительные сведения о определяемом пользователем коротком канале или условном операторе см. в разделе определяемых пользователем условных логических операторов спецификации языка C#.

Следующий пример приводит к возникновению ошибки CS0217:

// CS0217.cs  
using System;  
  
public class MyClass  
{  
   public static bool operator true (MyClass f)  
   {  
      return false;  
   }  
  
   public static bool operator false (MyClass f)  
   {  
      return false;  
   }  
  
   public static implicit operator int(MyClass x)  
   {  
      return 0;  
   }  
  
   public static int operator & (MyClass f1, MyClass f2)   // CS0217  
   // try the following line instead  
   // public static MyClass operator & (MyClass f1, MyClass f2)  
   {  
      return new MyClass();  
   }  
  
   public static void Main()  
   {  
      MyClass f = new MyClass();  
      int i = f && f;  
   }  
}  

См. также