Выбрать главу

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.

Использование типов System.DateTime и System.TimeSpan

В пространстве имен System определено несколько полезных типов данных, для которых отсутствуют ключевые слова языка С#, в том числе структуры DateTime и TimeSpan. (При желании можете самостоятельно ознакомиться с типом System.Void, показанным на рис. 3.2.)

Тип DateTime содержит данные, представляющие специфичное значение даты (месяц, день, год) и времени, которые могут форматироваться разнообразными способами с применением членов этого типа. Структура TimeSpan позволяет легко определять и трансформировать единицы времени, используя различные ее члены.

static void UseDatesAndTimes()

{

  Console.WriteLine("=> Dates and Times:");

  // Этот конструктор принимает год, месяц и день.

  DateTime dt = new DateTime(2015, 10, 17);

  // Какой это день месяца?

  Console.WriteLine("The day of {0} is {1}", dt.Date, dt.DayOfWeek);

  // Сейчас месяц декабрь.

  dt = dt.AddMonths(2);

  Console.WriteLine("Daylight savings: {0}", dt.IsDaylightSavingTime());

  // Этот конструктор принимает часы, минуты и секунды.

  TimeSpan ts = new TimeSpan(4, 30, 0);

  Console.WriteLine(ts);

  // Вычесть 15 минут из текущего значения TimeSpan и вывести результат.

  Console.WriteLine(ts.Subtract(new TimeSpan(0, 15, 0)));

}

Работа с пространством имен System.Numerics

В пространстве имен System.Numerics определена структура по имени BigInteger. Тип данных BigInteger может применяться для представления огромных числовых значений, которые не ограничены фиксированным верхним или нижним пределом.

На заметку! В пространстве имен System.Numerics также определена вторая структура по имени Complex, которая позволяет моделировать математически сложные числовые данные (например, мнимые единицы, вещественные данные, гиперболические тангенсы). Дополнительные сведения о структуре Complex можно найти в документации по .NET Core.

Несмотря на то что во многих приложениях .NET Core потребность в структуре BigInteger может никогда не возникать, если все-таки необходимо определить большое числовое значение, то в первую очередь понадобится добавить в файл показанную ниже директиву using:

// Здесь определен тип BigInteger:

using System.Numerics;

Теперь с применением операции new можно создать переменную BigInteger. Внутри конструктора можно указать числовое значение, включая данные с плавающей точкой. Однако компилятор C# неявно типизирует числа не с плавающей точкой как int, а числа с плавающей точкой — как double. Как же тогда установить для BigInteger большое значение, не переполнив стандартные типы данных, которые задействуются для неформатированных числовых значений?