В С# есть два странных оператора:
Если я понимаю это право, эти операторы могут использоваться в типах, которые я хочу использовать вместо булевского выражения, и где я не хочу предоставлять неявное преобразование в bool.
Скажем, у меня есть следующий класс:
    public class MyType
    {
        public readonly int Value;
        public MyType(int value)
        {
            Value = value;
        }
        public static bool operator true (MyType mt)
        {
            return  mt.Value > 0;
        }
        public static bool operator false (MyType mt)
        {
            return  mt.Value < 0;
        }
    }
Поэтому я могу написать следующий код:
    MyType mTrue = new MyType(100);
    MyType mFalse = new MyType(-100);
    MyType mDontKnow = new MyType(0);
    if (mTrue)
    {
         // Do something.
    }
    while (mFalse)
    {
        // Do something else.
    }
    do
    {
        // Another code comes here.
    } while (mDontKnow)
Однако для всех приведенных выше примеров выполняется только истинный оператор. Итак, для чего нужен фальшивый оператор в С#?
Примечание. Дополнительные примеры можно найти здесь, здесь и здесь.
