Язык программирования C#9 и платформа .NET5
Помимо возможности хранения одиночного элемента символьных данных тип
предлагает немало другой функциональности. Используя статические методыSystem.Char, можно выяснять, является данный символ цифрой, буквой, знаком пунктуации или чем-то еще. Взгляните на следующий метод:System.Charstatic void CharFunctionality(){Console.WriteLine("=> char type Functionality:");char myChar = 'a';Console.WriteLine("char.IsDigit('a'): {0}", char.IsDigit(myChar));Console.WriteLine("char.IsLetter('a'): {0}", char.IsLetter(myChar));Console.WriteLine("char.IsWhiteSpace('Hello There', 5): {0}",char.IsWhiteSpace("Hello There", 5));Console.WriteLine("char.IsWhiteSpace('Hello There', 6): {0}",char.IsWhiteSpace("Hello There", 6));Console.WriteLine("char.IsPunctuation('?'): {0}",char.IsPunctuation('?'));Console.WriteLine();}В методе
было показано, что для многих членовCharFunctionality()предусмотрены два соглашения о вызове: одиночный символ или строка с числовым индексом, указывающим позицию проверяемого символа.System.CharРазбор значений из строковых данных
Типы данных .NET Core предоставляют возможность генерировать переменную лежащего в основе типа, имея текстовый эквивалент (например, путем выполнения разбора) Такой прием может оказаться исключительно удобным, когда вы хотите преобразовывать в числовые значения некоторые вводимые пользователем данные (вроде элемента, выбранного в раскрывающемся списке внутри графического пользовательского интерфейса) Ниже приведен пример метода
, содержащий логику разбора:ParseFromStrings()static void ParseFromStrings(){Console.WriteLine("=> Data type parsing:");bool b = bool.Parse("True");Console.WriteLine("Value of b: {0}", b); // Вывод значения bdouble d = double.Parse("99.884");Console.WriteLine("Value of d: {0}", d); // Вывод значения dint i = int.Parse("8");Console.WriteLine("Value of i: {0}", i); // Вывод значения ichar c = Char.Parse("w");Console.WriteLine("Value of c: {0}", c); // Вывод значения сConsole.WriteLine();}Использование метода TryParse() для разбора значений из строковых данных
Проблема с предыдущим кодом связана с тем, что если строка не может быть аккуратно преобразована в корректный тип данных, то сгенерируется исключение. Например, следующий код потерпит неудачу во время выполнения:
bool b = bool.Parse("Hello");Решение предусматривает помещение каждого вызова
в блокParse()(обработка исключений подробно раскрывается в главе 7), что добавит много кода, или применение методаtry-catch. МетодTryParse()принимает параметрTryParse()(модификаторoutрассматривается в главе 4) и возвращает значениеout, которое указывает, успешно ли прошел разбор. Создайте новый метод по имениboolи поместите в него такой код:ParseFromStringWithTryParse()static void ParseFromStringsWithTryParse(){Console.WriteLine("=> Data type parsing with TryParse:");if (bool.TryParse("True", out bool b)){Console.WriteLine("Value of b: {0}", b); // Вывод значения b}else{Console.WriteLine("Default value of b: {0}", b);// Вывод стандартного значения b}string value = "Hello";if (double.TryParse(value, out double d)){Console.WriteLine("Value of d: {0}", d);}else{// Преобразование входного значения в double потерпело неудачу// и переменной было присвоено стандартное значение.Console.WriteLine("Failed to convert the input ({0}) to a doubleandthe variable wasassigned the default {1}", value,d);}Console.WriteLine();}Если вы только начали осваивать программирование и не знаете, как работают операторы
, то они подробно рассматриваются позже в главе. В приведенном выше примере важно отметить, что когда строка может быть преобразована в запрошенный тип данных, методif/elseвозвращаетTryParse()и присваивает разобранное значение переменной, переданной методу. В случае невозможности разбора значения переменной присваивается стандартное значение, а методtrueвозвращаетTryParse().false