В профессиональных программах необходим контроль вводимых данных. Например, вам нужно ввести двухзначное целое число. Не важно, в каком приложении будет ввод числа, так как в C# числа получают после конвертации строки. Например, в консольном приложении:
int n = Convert.ToInt32(Console.ReadLine( ));
или в Windows-приложении через элемент textBox
int n =Convert.ToInt32(textBox1.Text);
При вводе данных ошибки могут быть двух типов:
1) введенная текстовая строка не может быть преобразована в целое число. При этом возникает исключительная ситуация, которая может быть обработана с использованием конструкции try-catch;
2) Другой случай — когда строка в целое число преобразуется верно, но число выходит за требуемый в задаче диапазон. В этом случае также необходимы проверка, информирование пользователя и присвоение целочисленной переменной некоторого разумного значения.
Если таких данных более одного, то целесообразно решить эту проблему один раз, создав класс с необходимым набором инструментов.
Решение:
Создадим класс Restricted Integer Number (RIN) — «Ограниченное целое число»:
class RIN { int min = 0; // нижняя граница int max = 100; // верхняя граница public string info = "число"; // имя параметра public bool n_bool; // успешность преобразования // Ограниченное число: поле n и свойство N int n; public int N // свойство { get { return n; } set { if (value < min) { n = min; n_bool = false; } else if (value > max) { n = max; n_bool = false; } else { n = value; n_bool = true; } } } // конструктор public RIN(string n_st, int n_min, int n_max, int n_def, string n_info) { min = n_min; max = n_max; info = n_info; n_bool = true; try { N = Convert.ToInt32(n_st); if (!n_bool) { info = "Ошибка ввода параметра << " + info + " >>. Число вне диапазона. Автоматически присваивается нижняя/верхняя граница. Для изменения введите целое число от " + min.ToString() + " до " + max.ToString(); } } catch { info = "Ошибка ввода параметра << " + info + " >>. Введите целое число от " + min.ToString() + " до " + max.ToString() + ". По умолчанию параметр = " + n_def.ToString(); ; n = n_def; n_bool = false; } } } // end class RIN
Использование свойства N гарантирует, что в программе полю n не может быть присвоено число вне заданного диапазона, что обеспечивается кодом аксессора set, см. также статью Свойства в C#.
Для проверки создадим консольное приложение с кодом в классе Program:
class Program { static void Main(string[] args) { Console.Write("Введите двухзначное целое число: "); string number = Console.ReadLine(); RIN k = new RIN(number, 10, 99, 55, "число"); int n = k.N; Console.WriteLine("Ваше число: {0}",n); if (!k.n_bool) Console.WriteLine(k.info); Console.ReadKey(); } }
После ввода числа в строку number инициализируем объект k, используя конструктор с параметрами: 1-й — значение числа, 2-й и 3-й — минимальное и максимальное значение целого числа (для двухзначного числа это 10 и 99), 4-й параметр — некоторое «серединное» значение, когда строка не может быть преобразована в целое число, 5-й параметр — его имя.
Два общедоступных поля объекта string info и bool n_bool можно использовать для анализа результата преобразования строки в число.
Тестовые значения:44 (ответ — 44), 9 (ответ -10), 100 (ответ — 99), qwerty (ответ -55). Последние три ответа сопровождаются сообщениями об ошибках ввода.
Заметим, что класс RIN может быть использован в Windows-приложении без изменений.
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.