Поиск…


Преобразование строки в целое число

Существуют различные методы для явного преобразования string в integer , например:

  1. Convert.ToInt16();

  2. Convert.ToInt32();

  3. Convert.ToInt64();

  4. 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow