C# Language
Обработка FormatException при преобразовании строки в другие типы
Поиск…
Преобразование строки в целое число
Существуют различные методы для явного преобразования string
в integer
, например:
Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();
int.Parse();
Но все эти методы будут FormatException
, если входная строка содержит нечисловые символы. Для этого нам нужно написать дополнительную обработку исключений ( try..catch
), чтобы обрабатывать их в таких случаях.
Объяснение примерами:
Итак, пусть наш вклад будет:
string inputString = "10.2";
Пример 1: Convert.ToInt32()
int convertedInt = Convert.ToInt32(inputString); // Failed to Convert
// Throws an Exception "Input string was not in a correct format."
Примечание. То же самое касается других упомянутых методов, а именно: Convert.ToInt16();
и Convert.ToInt64();
Пример 2: int.Parse()
int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.
Как мы обходим это?
Как было сказано ранее, для обработки исключений нам обычно требуется try..catch
как показано ниже:
try
{
string inputString = "10.2";
int convertedInt = int.Parse(inputString);
}
catch (Exception Ex)
{
//Display some message, that the conversion has failed.
}
Но использование try..catch
во try..catch
мире не будет хорошей практикой, и могут быть некоторые сценарии, в которых мы хотели бы дать 0
если вход неверен (если мы следуем описанному выше методу, нам нужно назначить 0
convertedInt
из блок catch). Для обработки таких сценариев мы можем использовать специальный метод под названием .TryParse()
.
Метод .TryParse()
имеющий внутреннюю обработку Exception, которая даст вам выход параметру out
и возвращает логическое значение, указывающее статус преобразования ( true
если преобразование было успешным, false
если оно не удалось). На основе возвращаемого значения мы можем определить статус конверсии. Посмотрим один пример:
Использование 1: сохранить возвращаемое значение в булевой переменной
int convertedInt; // Be the required integer
bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
Мы можем проверить переменную isSuccessConversion
после выполнения, чтобы проверить статус преобразования. Если оно ложно, значение convertedInt
будет 0
(нет необходимости проверять возвращаемое значение, если вы хотите 0
для отказа преобразования).
Использование 2: Проверьте возвращаемое значение, if
if (int.TryParse(inputString, out convertedInt))
{
// convertedInt will have the converted value
// Proceed with that
}
else
{
// Display an error message
}
Использование 3: Не проверяя возвращаемое значение, вы можете использовать следующее, если вы не заботитесь о возвращаемом значении (преобразованном или нет, 0
будет в порядке)
int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted