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