1. Почему у тебя bin изначально равен "t"? Лишь бы было значение, чтоб не null? В таком случае обычно присваивают пустую строку string.Empty. Потому что значение "t" при чтении кода подразумевает его необходимость использования.
2. Зачем такой наворот?
int dec, res;
dec = 0;
Во первых int значимый тип и он при объявлении будет равен нулю. Если ты хотел явно, для читаемости, проинициализировать, то лучше сделать так
var dec = 0;
var res = 0;
3. Следующее dec = Convert.ToInt32(bin, 8);
Если ты парсишь в восмеричное значение, то почему называешь переменную dec? Это сбивает с толку. Назвал бы уже как-нибудь octal.
4. Если делаешь проверку от "дурака", то делать ее надо полностью. Вот эта проверка if (!(bin.Contains("8") || bin.Contains("9")))
проверит только ввод 8 и 9, но не защитит от ввода символов алфавита и др. Причем проверку надо делать ДО того как будешь пытаться парсить, сразу после ввода строки, а не после.
5. И вот та строчка bin == null ? "" : bin
Значение bin по коду у тебя никогда не будет равно null, ты его проинициализировал в самом начале. Но если ты все-таки хочешь проверить, то проверь лучше через string.IsNullOrEmpty(bin)
Просто как правило хорошего кода.
1. Значение t просто так да тут я протупил!
2. И int dec, res;
dec = 0;
и var dec = 0;
var res = 0;
Одинаково правильно и по длине одинаково!
3.dec ето decimal-тоесть десятиричная система, а вы не разабрались в коде я переводил не в восьмеричную а с восьмеричной - надо знать!
4.Проверка не от "дурака" в итоге проверка получается не токо на 8 и 9 а и на все остальное отсеевает кроме 0-7
Из етого видно что вы не знаете цыкла do while и не умеете пользыватся bool код уже работает в таком виде и проверка на все
5.Я нашол ето в инете и оно работает(про ето можно больше не писать)
//где-то тут получаем пользовательский ввод строки hexString
//....
try
{
//парсим как 16-ричное число
int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
}
catch (FormatException)
{
//не удалось распарсить, пишем ошибку
//...
}