Самый безопасный способ получить число из строки - использовать метод TryParse
, потому что этот метод возвращает два значения! Фактический тип возвращаемого значения - bool
, который указывает, была ли строка успешно преобразована, а другой - параметр out
, который относится к типу, в который мы преобразовываем, и который устанавливается в преобразованное значение. (или устанавливается значение по умолчанию для типа, если преобразование не выполняется).
Для температур мы часто имеем дело с десятичными числами, поэтому double
, вероятно, является хорошим типом для хранения результата. Итак, мы будем использовать double.TryParse
.
Теперь, так как мы не обязательно хотим просто выйти, если пользователь допустил ошибку, мы, вероятно, должны выполнить наше преобразование в цикле, поэтому, если оно завершится неудачно, мы просто попросим пользователя повторить попытку. И поскольку этот код будет использоваться и в других местах, мы можем создать вспомогательный метод, который принимает приглашение, отображаемое для пользователя, и возвращает строго типизированный ответ пользователя:
private static double GetDoubleFromUser(string prompt = null)
{
double result;
do
{
Console.Write(prompt);
} while (!double.TryParse(Console.ReadLine(), out result));
return result;
}
С помощью этого метода мы теперь можем просто объявить double и присвоить его возвращаемому значению метода, описанного выше, например:
double userInput = GetDoubleFromUser("Enter a temperature: ");
Еще одна вещь, которую мы можем исправить в коде, - это формулы, используемые для преобразования. Быстрая проверка онлайн показывает нам, что мы добавляем число для Кельвина и делаем умножение, деление и сложение по Фаренгейту. Мы можем вычислить эти значения на лету, как только мы получим температуру по Цельсию от пользователя:
private static void Main()
{
double celcius = GetDoubleFromUser("Enter a Celcius temperature: ");
double fahrenheit = celcius * 9 / 5 + 32;
double kelvin = celcius + 273.15;
Console.WriteLine("Kelvin = " + kelvin);
Console.WriteLine("Fahrenheit = " + fahrenheit);
GetKeyFromUser("Done! Press any key to exit...");
}
выход