Не понимаю, в чём ошибка при перегрузке операторов true и false. C#

Задание звучит так: "Написать программу, в которой есть класс с целочисленным и символьным полями. Нужно перегрузить операторы true и false так, что бы истинным считался объект , у которого разность значения целочисленного поля и кода символа из символьного поля не превышала 10. Используйте объект данного класса (в качестве условия в условном операторе) для того,что бы отобразить последовательность символов в консольном окне."

Вроде всё что нужно сделал. Но выводится весь массив символов,словно условия не существует. Не могу понять в чем ошибка и прошу помощи и разъяснений.

Мой код:


class MyClass
    {
        public int code;
        public char sym;
        // Конструкторы
        public MyClass(int a, char b)
        {
            code = a;
            sym = b;
        }

        public MyClass(int a)
        {
            code = a;
            sym = (char)a;
        }

        public MyClass (char b)
        {
            code = (int)b;
            sym = b;
        }

        //Перегружаем True/False
        public static bool operator true(MyClass obj)
        {
            if (obj.code - (int)obj.sym <= 10 || obj.code - (int)obj.sym >= -10) return true;
            else return false;
        }

        public static bool operator false (MyClass obj)
        {
            if (obj) return false;
            else return true;
        }

        public override string ToString()
        {
            string txt = sym + "(" + code + ")" + " ";
            return txt; 
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            char[] array = new char[] { 'A', 'b', 'D', 'e', 'X', 'I', 'R', 'O', 'k', 'w', 'q', 'L', 'U', 'p', 'F' };
            Console.WriteLine("Введите контрольный символ");
            MyClass A = new MyClass(Console.Read());
            Console.WriteLine();
            Console.WriteLine(A);

            for (int i = 0; i < array.Length; i++)
            {
                A.sym = array[i];
                if (A) Console.Write(array[i] + "(" + (int)array[i] + ")" + " ");
            }
        }
    }


Ответы (2 шт):

Автор решения: Exploding Kitten

У вас ошибка в условии используйте:

public static bool operator true(MyClass obj)
{
    return Math.Abs(obj.code - (int)obj.sym) <= 10;
}
→ Ссылка
Автор решения: CrazyElf

Так вот это условие же работает всегда:

if (obj.code - (int)obj.sym <= 10 || obj.code - (int)obj.sym >= -10) return true;

Даже не важно что у вас там в obj, фактически это тоже самое, что:

if (x <= 10 || x >= -10) return true;

При любом x у вас будет true.

→ Ссылка