Как преобразовать строку в Int?

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

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

27 ответов


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

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 как разобрать метод, за исключением метод tryparse не вызывает исключения, если преобразование не выполняется. Оно исключает необходимо использовать обработку исключений для тестирования для FormatException в событии что является недопустимым и не может быть успешно проанализирован. - MSDN


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(..);
}

int.TryParse()

он не будет бросать, если текст не является числовым.


int myInt = int.Parse(TextBoxD1.Text)

еще один способ:

bool isConvertible = false;
int myInt = 0;

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

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


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

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

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
}

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

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

посмотреть типа int32.Метод Tryparse (Строка, Типа Int32) для получения более подробной информации.


понравится...

int i = 0;
string s = "123";
i =int.Parse(s);
i = Convert.ToInt32(s);

Как поясняется в TryParse документация, TryParse () возвращает логическое значение, указывающее, что найдено допустимое число:

bool success = Int32.TryParse(TextBoxD1.Text, out val);

if (success)
{
// put val in database
}
else
{
// handle the case that the string doesn't contain a valid number
}

хотя здесь уже есть много решений, которые описывают 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.


будьте осторожны при использовании 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

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

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();

Вы можете использовать любой,

int i = Convert.ToInt32(TextBoxD1.Text);

или

int i =int.Parse(TextBoxD1.Text);

вы также можете использовать метод расширения, поэтому он будет более читаемым (хотя все уже привыкли к регулярным функциям разбора).

public static class StringExtensions
{
    /// <summary>
    /// Converts a string to int.
    /// </summary>
    /// <param name="value">The string to convert.</param>
    /// <returns>The converted integer.</returns>
    public static int ParseToInt32(this string value)
    {
        return int.Parse(value);
    }

    /// <summary>
    /// Checks whether the value is integer.
    /// </summary>
    /// <param name="value">The string to check.</param>
    /// <param name="result">The out int parameter.</param>
    /// <returns>true if the value is an integer; otherwise, false.</returns>
    public static bool TryParseToInt32(this string value, out int result)
    {
        return int.TryParse(value, out result);
    }
}

и тогда вы можете назвать это так:

  1. Если вы уверены, что ваша строка является целым числом, например "50".

    int num = TextBoxD1.Text.ParseToInt32();
    
  2. Если вы не уверены и хотите предотвратить сбои.

    int num;
    if (TextBoxD1.Text.TryParseToInt32(out num))
    {
        //The parse was successful, the num has the parsed value.
    }
    

чтобы сделать его более динамичным, так что вы можете разберите его также на double, float и т. д., вы можете сделать общее расширение.


преобразование string to int можно сделать для:int, Int32, Int64 и другие типы данных, отражающие целочисленные типы данных в .NET

ниже пример показывает это преобразование:

этот элемент адаптера данных show (for info) инициализирован значением int. То же самое можно сделать прямо как,

int xxiiqVal = Int32.Parse(strNabcd);

Ex.

string strNii = "";
UsrDataAdapter.SelectCommand.Parameters["@Nii"].Value = Int32.Parse(strNii );

ссылка, чтобы увидеть эту демо.


//May be quite some time ago but I just want throw in some line for any one who may still need it

int intValue;
string strValue = "2021";

try
{
    intValue = Convert.ToInt32(strValue);
}
catch
{
    //Default Value if conversion fails OR return specified error
    // Example 
    intValue = 2000;
}

Это

string x=TextBoxD1.Text;
int xi=Convert.ToInt32(x);

или вы можете использовать

int xi=Int32.Parse(x);

Refer Microsoft Developer Network для получения дополнительной информации


вы можете преобразовать string в int в C# использование:

функции класса преобразования т. е. Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64() и с помощью Parse и TryParse функции. Приведены примеры здесь.


int i = Convert.ToInt32(TextBoxD1.Text);

то, как я всегда это делаю, похоже на это

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace example_string_to_int
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            // this turns the text in text box 1 into a string
            int b;
            if (!int.TryParse(a, out b))
            {
                MessageBox.Show("this is not a number");
            }
            else
            {
                textBox2.Text = a+" is a number" ;
            }
            // then this if statment says if the string not a number display an error elce now you will have an intager.
        }
    }
}

вот как я бы это сделал, надеюсь, это поможет. (:


int x = Int32.TryParse(TextBoxD1.Text, out x)?x:0;

вы можете сделать, как показано ниже, без TryParse или встроенных функций

static int convertToInt(string a)
{
    int x=0;
    for (int i = 0; i < a.Length; i++)
        {
            int temp=a[i] - '0';
            if (temp!=0)
            {
                x += temp * (int)Math.Pow(10, (a.Length - (i+1)));
            }              
        }
    return x ;
}

вы можете попробовать это, это будет работать:

int x = Convert.ToInt32(TextBoxD1.Text);

строковое значение в переменной TextBoxD1.Текст будет преобразован в Int32 и сохранен в x.


Если вы ищете длинный путь, просто создайте свой один метод:

static int convertToInt(string a)
    {
        int x = 0;

        Char[] charArray = a.ToCharArray();
        int j = charArray.Length;

        for (int i = 0; i < charArray.Length; i++)
        {
            j--;
            int s = (int)Math.Pow(10, j);

            x += ((int)Char.GetNumericValue(charArray[i]) * s);
        }
        return x;
    }

метод 1

int  TheAnswer1 = 0;
bool Success = Int32.TryParse("42", out TheAnswer1);
if (!Success) {
    Console.WriteLine("String not Convertable to an Integer");
}

Метод 2

int TheAnswer2 = 0;
try {
    TheAnswer2 = Int32.Parse("42");
}
catch {
    Console.WriteLine("String not Convertable to an Integer");
}

метод 3

int TheAnswer3 = 0;
try {
    TheAnswer3 = Int32.Parse("42");
}
catch (FormatException) {
    Console.WriteLine("String not in the correct format for an Integer");
}
catch (ArgumentNullException) {
    Console.WriteLine("String is null");
}
catch (OverflowException) {
    Console.WriteLine("String represents a number less than"
                      + "MinValue or greater than MaxValue");
}

этот код работает для меня в Visual Studio 2010 с:

int someValue = Convert.ToInt32(TextBoxD1.Text);

самый простой способ-использовать вспомогательный модуль такой:

public static class StrExtensions
{
  public static int ToInt(this string s, int defVal = 0) => int.TryParse(s, out var v) ? v : defVal;
  public static int? ToNullableInt(this string s, int? defVal = null) => int.TryParse(s, out var v) ? v : defVal;
}

использование настолько просто:

var x = "123".ToInt(); // 123
var y = "abc".ToInt(); // 0

string t = null;
var z = t.ToInt(-1); // -1
var w = "abc".ToNullableInt(); // null

это может помочь вам; D

{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        float Stukprijs;
        float Aantal;
        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("In de eersre textbox staat een geldbedrag." + Environment.NewLine + "In de tweede textbox staat een aantal." + Environment.NewLine + "Bereken wat er moetworden betaald." + Environment.NewLine + "Je krijgt 15% korting over het bedrag BOVEN de 100." + Environment.NewLine + "Als de korting meer dan 10 euri is," + Environment.NewLine + "wordt de korting textbox lichtgroen");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            errorProvider2.Clear();
            if (float.TryParse(textBox1.Text, out Stukprijs))
            {
                if (float.TryParse(textBox2.Text, out Aantal))
                {
                    float Totaal = Stukprijs * Aantal;
                    string Output = Totaal.ToString();
                    textBox3.Text = Output;
                    if (Totaal >= 100)
                    {
                        float korting = Totaal - 100;
                        float korting2 = korting / 100 * 15;
                        string Output2 = korting2.ToString();
                        textBox4.Text = Output2;
                        if (korting2 >= 10)
                        {
                            textBox4.BackColor = Color.LightGreen;
                        }
                        else
                        {
                            textBox4.BackColor = SystemColors.Control;
                        }
                    }
                    else
                    {
                        textBox4.Text = "0";
                        textBox4.BackColor = SystemColors.Control;
                    }
                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }

            }
            else
            {
                errorProvider1.SetError(textBox1, "Bedrag plz!");
                if (float.TryParse(textBox2.Text, out Aantal))
                {

                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }
            }

        }

        private void BTNwissel_Click(object sender, EventArgs e)
        {
            //LL, LU, LR, LD.
            Color c = LL.BackColor;
            LL.BackColor = LU.BackColor;
            LU.BackColor = LR.BackColor;
            LR.BackColor = LD.BackColor;
            LD.BackColor = c;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show("zorg dat de kleuren linksom wisselen als je op de knop drukt.");
        }
    }
}