Как я могу преобразовать строку в Int? - PullRequest
546 голосов
/ 20 июня 2009

У меня есть TextBoxD1.Text, и я хочу преобразовать его в int, чтобы сохранить его в базе данных.

Как я могу это сделать?

Ответы [ 27 ]

908 голосов
/ 20 июня 2009

Попробуйте это:

int x = Int32.Parse(TextBoxD1.Text);

или еще лучше:

int x = 0;

Int32.TryParse(TextBoxD1.Text, out x);

Кроме того, поскольку Int32.TryParse возвращает bool, вы можете использовать его возвращаемое значение для принятия решения о результатах попытки синтаксического анализа:

int x = 0;

if (Int32.TryParse(TextBoxD1.Text, out x))
{
    // you know that the parsing attempt
    // was successful
}

Если вам интересно, разницу между Parse и TryParse лучше всего суммировать следующим образом:

Метод TryParse похож на Parse метод, кроме метода TryParse не выдает исключение, если преобразование не удается Это устраняет необходимо использовать обработку исключений для проверки для FormatException в событии это s недействительно и не может быть успешно разобрали. - MSDN

47 голосов
/ 20 июня 2009
Convert.ToInt32( TextBoxD1.Text );

Используйте это, если вы уверены, что содержимое текстового поля является допустимым int. Более безопасный вариант -

int val = 0;
Int32.TryParse( TextBoxD1.Text, out val );

Это предоставит вам некоторые значения по умолчанию, которые вы можете использовать. Int32.TryParse также возвращает логическое значение, указывающее, был ли он способен анализировать или нет, так что вы даже можете использовать его как условие оператора if.

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}
31 голосов
/ 20 июня 2009
int.TryParse()

Не выдаст, если текст не числовой.

18 голосов
/ 20 июня 2009
int myInt = int.Parse(TextBoxD1.Text)

Другой способ будет:

bool isConvertible = false;
int myInt = 0;

isConvertible = int.TryParse(TextBoxD1.Text, out myInt);

Разница между ними заключается в том, что первый вызовет исключение, если значение в вашем текстовом поле не может быть преобразовано, а второй просто вернет false.

15 голосов
/ 20 июня 2009

Вам необходимо проанализировать строку, а также убедиться, что она действительно в формате целого числа.

Самый простой способ это:

int parsedInt = 0;
if (int.TryParse(TextBoxD1.Text, out parsedInt))
{
   // Code for if the string was valid
}
else
{
   // Code for if the string was invalid
}
10 голосов
/ 20 июня 2009
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

Оператор TryParse возвращает логическое значение, представляющее, успешно ли выполнен анализ или нет. Если это удалось, проанализированное значение сохраняется во втором параметре.

См. Метод Int32.TryParse (String, Int32) для получения более подробной информации.

9 голосов
/ 11 апреля 2015

Наслаждайся этим ...

int i = 0;
string s = "123";
i =int.Parse(s);
i = Convert.ToInt32(s);
8 голосов
/ 03 февраля 2016

Будьте осторожны при использовании Convert.ToInt32 () на символе!
Он вернет UTF-16 код символа!

Если вы получаете доступ к строке только в определенной позиции, используя оператор индексации [i], он вернет char, а не string!

String input = "123678";

int x = Convert.ToInt32(input[4]);  // returns 55

int x = Convert.ToInt32(input[4].toString());  // returns 7
8 голосов
/ 06 июля 2015

Хотя здесь уже есть много решений, описывающих int.Parse, во всех ответах чего-то не хватает. Как правило, строковые представления числовых значений различаются в зависимости от культуры. Элементы числовых строк, такие как символы валюты, разделители групп (или тысяч) и десятичные разделители, различаются в зависимости от культуры.

Если вы хотите создать надежный способ разбора строки на целое число, поэтому важно учитывать информацию о культуре. Если вы этого не сделаете, будут использованы текущие настройки культуры . Это может дать пользователю довольно неприятный сюрприз - или даже хуже, если вы анализируете форматы файлов. Если вы просто хотите разобрать английский язык, лучше просто сделать это явным, указав используемые настройки культуры:

var culture = CultureInfo.GetCulture("en-US");
int result = 0;
if (int.TryParse(myString, NumberStyles.Integer, culture, out result))
{
    // use result...
}

Для получения дополнительной информации читайте о CultureInfo, в частности, NumberFormatInfo в MSDN.

6 голосов
/ 05 февраля 2016

Вы можете написать свой собственный метод расширения

public static class IntegerExtensions
{
    public static int ParseInt(this string value, int defaultValue = 0)
    {
        int parsedValue;
        if (int.TryParse(value, out parsedValue))
        {
            return parsedValue;
        }

        return defaultValue;
    }

    public static int? ParseNullableInt(this string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            return null;
        }

        return value.ParseInt();
    }
}

А где бы в коде не звонили

int myNumber = someString.ParseInt(); // returns value or 0
int age = someString.ParseInt(18); // with default value 18
int? userId = someString.ParseNullableInt(); // returns value or null

В данном конкретном случае

int yourValue = TextBoxD1.Text.ParseInt();
...