с использованием методов расширения в int

Я читаю о методах расширения и пытаюсь их использовать чтобы увидеть, как они работают, я попробовал следующее:

namespace clunk {
    public static class oog {
        public static int doubleMe(this int x) {
            return 2 * x;
        }
    }

    class Program {
        static void Main() {
            Console.WriteLine(5.doubleMe());
        }
    }
}

и он работал, как ожидалось, успешно расширил int с помощью метода doubleMe, напечатав 10.

Затем, будучи старым специалистом по C, я подумал, смогу ли я сделать это:

namespace clunk {
    public static class BoolLikeC {
        public static bool operator true(this int i)  { return i != 0; }
        public static bool operator false(this int i) { return i == 0; }
    }

    class Program {
        static void Main() {
            if ( 7 ) {
                Console.WriteLine("7 is so true");
            }
        }
    }
}

Я думаю, что если первое сработает, то второе должно работать, чтобы сделать его таким, чтобы int, используемый в логическом контексте, вызовет метод расширения для int, проверьте, что 7 не равно 0 и возвращает истину. Но вместо этого компилятору даже не нравится более поздний код и помещает красные волнистые линии под двумя этим и говорит: «Тип ожидается». Почему это не должно работать?

15
задан IAbstract 11 July 2011 в 21:44
поделиться