Удобно рассматривать на примере массива. Вот вы пишите int[] buffer
И какой же тут размер массива у нас? А никакой, массива то ещё нет, только место для его ссылки.
И только после buffer = new int[10050000000] у вас выделяться гигабайты памяти на него, и можно будет что-то в него сохранить.
Тут нет лучше, вопрос что вам нужно. Исключение вам всё равно придётся где-то обработать, и вы сами решаете на каком уровней логики не критично не получить результат.
Тот же List не может подсунуть вам фейк в виде -1, потому что он не знает, что это какое-то не валидное значение в вашем случае.
Ну самый примитив в лоб это проверить есть ли введённый текст цвета, если нет, то создать объект через конструктор без него.
Но лучше же, эту проверку затащить во второй конструктор, и там уже проверять, если цвет пустой, то - прочерк. А от первого конструктора избавиться.
Ну так правильно, у вас в namespace Console есть только класс Program. Никаких WriteLine я не вижу. Вы или не делайте одинаковых имён, либо явно указываете, что вам нужна консоль из пространства имён System System.Console
но полученные папки "для публикации" выходят совсем тяжёлыми - под 200 мегабайт для программки весом в 0,2 МБ!!!
Так в варианте с .NET Framework надо прежде скачать этот фреймворк на 400Мб и установить. Без него не будет работать. Поэтому утверждение, что программа весит 0.2Мб не верное.