Я читаю о методах расширения и пытаюсь их использовать чтобы увидеть, как они работают, я попробовал следующее:
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 и возвращает истину. Но вместо этого компилятору даже не нравится более поздний код и помещает красные волнистые линии под двумя этим и говорит: «Тип ожидается». Почему это не должно работать?