Это действительно возможно для некоторого c # (предполагая, что c # потому что он помечен ... не принимая целое число, даже если он помечен, потому что правое сравнение по-прежнему является целым числом, поэтому он соответствует тегам! ;-)), чтобы перейтив это if
... возьмите:
public class Foo {
public static bool operator> (Foo a, int b) {
return true;
}
public static bool operator< (Foo a, int b) {
return true;
}
}
Тогда:
Foo i = new Foo();
if(i<2 && i>10){
Console.WriteLine("Pass!");
}
Угадайте вывод? Проверьте это здесь
Другой способ, без лишних классов или перегрузки операторов:
private static bool odd;
public static int i { get { odd = !odd; return odd ? 1 : 11; } }
Проверьте это
В противном случае это также может произойти, если многопоточность (если значение i
изменяется между сравнениями), если вы не примените правильную блокировку