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