Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Страница 56

Помимо возможности хранения одиночного элемента символьных данных тип

System.Char
предлагает немало другой функциональности. Используя статические методы
System.Char
, можно выяснять, является данный символ цифрой, буквой, знаком пунктуации или чем-то еще. Взгляните на следующий метод:

static 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);  // Вывод значения b

  double d = double.Parse("99.884");

  Console.WriteLine("Value of d: {0}", d);  // Вывод значения d

  int i = int.Parse("8");

  Console.WriteLine("Value of i: {0}", i);  // Вывод значения i

  char c = Char.Parse("w");

  Console.WriteLine("Value of c: {0}", c);  // Вывод значения с

  Console.WriteLine();

}

Использование метода TryParse() для разбора значений из строковых данных

Проблема с предыдущим кодом связана с тем, что если строка не может быть аккуратно преобразована в корректный тип данных, то сгенерируется исключение. Например, следующий код потерпит неудачу во время выполнения:

bool b = bool.Parse("Hello");

Решение предусматривает помещение каждого вызова

Parse()
в блок
try-catch
(обработка исключений подробно раскрывается в главе 7), что добавит много кода, или применение метода
TryParse()
. Метод
TryParse()
принимает параметр
out
(модификатор
out
рассматривается в главе 4) и возвращает значение
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 double
 and

                      the variable was
assigned the default {1}", value,d);

  }

  Console.WriteLine();

}

Если вы только начали осваивать программирование и не знаете, как работают операторы

if/else
, то они подробно рассматриваются позже в главе. В приведенном выше примере важно отметить, что когда строка может быть преобразована в запрошенный тип данных, метод
TryParse()
возвращает
true
и присваивает разобранное значение переменной, переданной методу. В случае невозможности разбора значения переменной присваивается стандартное значение, а метод
TryParse()
возвращает
false
.