На C# удобно сделать гуишку, но писать код по работе с адресами и памятью нет. В общем нужно понимать ASM, а не шарп, чтобы понять логику игры, а писать свой результат на C.
Чтобы понять как работает нейронка распознающая символы не нужна не теория энтропии, ни математическая статистика. Достаточно разобрать как работает код этой сети. Ничего сложнее умножения там нет.
Для начала погружения можно взять тот же playground.tensorflow.org и его код на гитхабе.
Да просто пытаются защитить коллекцию от модификации. Когда ты на выходе получишь IEnumerable, то ты не изменить, не добавить элементы не можешь. Да и в большинстве случаев ты потом результат всё равно как последовательность обрабатываешь.