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