如何将String转换为Int?


Answers:


1038

尝试这个:

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

或更好:

int x = 0;

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

另外,由于Int32.TryParse返回a,因此bool您可以使用其返回值来决定解析尝试的结果:

int x = 0;

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

如果您很好奇,则最好将Parse和之间的区别TryParse总结如下:

TryParse方法类似于Parse方法,但是如果转换失败,TryParse方法不会引发异常。如果s无效且无法成功解析,则无需使用异常处理来测试FormatException。- MSDN


3
如果整数是64位或看起来像“ aslkdlksadjsd”,该怎么办?这样还安全吗?
乔尼2014年

6
@强尼Int64.Parse()。如果输入非INT,那么你会得到一个execption和堆栈跟踪Int64.Parse,或布尔FalseInt64.TryParse(),所以你需要一个if语句,像if (Int32.TryParse(TextBoxD1.Text, out x)) {}

1
如果仅在成功条件内使用变量,也可以尝试在TryParse中初始化变量。例如:Int32.TryParse(TextBoxD1.Text,out int x))
simplesiby

5
也许这对于其他所有人来说都是难以置信的,但是对于笨拙的人来说,如果转换成功,“ out x”的作用是将x的值设置为整数转换字符串。也就是说,在这种情况下,如果字符串中包含任何非整数字符,则x = 0;否则,则x = string-as-integer的值。整洁的事情是,这是一个简短的表达式,它告诉您强制转换是否成功,并将强制转换整数同时存储在变量中。显然,您经常会想继续在行上方输入“ else {//解析的字符串不是整数,因此需要一些代码来处理这种情况}”
Will Croxford

@Roberto好的,但是用户(错误或有意地)可能在文本框中键入诸如“ aslkdlksadjsd”的值!所以我们的程序应该崩溃吗?
S.Serpooshan

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

-1 RE。“这将为您提供一些您可以使用的默认值。” 如果您指的是val,那么会遇到麻烦:“此参数未初始化传递;结果中最初提供的任何值都将被覆盖。” [参考 docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2

6
10年前,我道歉。
Babak Naffas

37
int.TryParse()

如果文本不是数字,则不会抛出。


这比其他两个要好。用户输入的格式可能错误。这比其他要求的异常处理更有效。
UncleO

究竟。如果转换失败,则返回false。
n8wrl

21
int myInt = int.Parse(TextBoxD1.Text)

另一种方法是:

bool isConvertible = false;
int myInt = 0;

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

两者之间的区别在于,如果无法转换文本框中的值,则第一个将引发异常,而第二个将仅返回false。


上面的布尔变量非常有用,我们使用转换后的值作为同位子,在if子句中说。 code int NumericJL; bool isNum = int.TryParse(nomeeJobBand,out NumericJL); 如果(isNum)//撤消的JL能够声明为int,然后继续进行比较{if(!(NumericJL> = 6)){//提名} // else {}}
baymax

16

您需要解析该字符串,还需要确保该字符串确实是整数格式。

最简单的方法是这样的:

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
}

14

在char上使用Convert.ToInt32()时要小心!
它将返回UTF-16字符代码!

如果使用[i]索引运算符仅在特定位置访问字符串,则它将返回a char而不是string

String input = "123678";
                    ^
                    |
int indexOfSeven =  4;

int x = Convert.ToInt32(input[indexOfSeven]);             // Returns 55

int x = Convert.ToInt32(input[indexOfSeven].toString());  // Returns 7



10

虽然这里已经有很多解决方案可以描述 int.Parse,但是所有答案中都缺少一些重要的内容。通常,数值的字符串表示形式因文化而异。数字字符串的元素(例如货币符号,组(或千)分隔符和十进制分隔符)均会因区域性而异。

如果您想创建一种健壮的方法来将字符串解析为整数,那么考虑区域性信息就很重要。否则,将使用当前的区域性设置。如果您正在解析文件格式,这可能会给用户带来令人讨厌的惊喜-甚至更糟。如果您只想英语解析,那么最好通过指定要使用的区域性设置来使其简单明了:

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

有关更多信息,请阅读CultureInfo,尤其是MSDN 上的NumberFormatInfo


8

您可以编写自己的扩展方法

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

如果不是类被称为StringExtensions代替IntegerExtensions,因为这些扩展方法作用于string不上int
湿婆神

7

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
}


6

您可以使用

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

要么

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

这与以前的答案有何不同?
Peter Mortensen

5
//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;
}

在这种情况下,默认设置不是一个好主意。如果在所有违约关键必须的,我建议返回0
Prageeth Saravanan

5

您可以使用以下命令在C#中将字符串转换为int:

转换类的功能,即Convert.ToInt16()Convert.ToInt32()Convert.ToInt64()或使用ParseTryParse功能。此处给出示例。


这与以前的答案有何不同?
Peter Mortensen

4

您还可以使用扩展方法,因此它更具可读性(尽管每个人都已经习惯了常规的Parse函数)。

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等,可以进行通用扩展。


4

的转换stringint可以做为:intInt32Int64及其他数据类型反映整数数据类型在.NET

下面的示例显示了这种转换:

此显示(用于信息)数据适配器元素已初始化为int值。同样可以直接做,

int xxiiqVal = Int32.Parse(strNabcd);

例如

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

链接查看此演示



4

您可以在没有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;
}

convertToInt(“ 1234”)给出10000 ......如果您要复制别人的答案,至少要复制整个内容
SerenityNow

不要将我与自己比较。.而是添加更新的解决方案..大声笑
lazydeveloper

@Serenity现在您可以立即检查。这是拼写错误。
lazydeveloper

1
引用您的ID,懒惰的开发人员将不会创建这种方法!; D好
S.Serpooshan


2

您可以借助parse方法将字符串转换为整数值。

例如:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);

这与以前的答案有何不同?
Peter Mortensen

2

我一直这样做的方式是这样的:

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' statement says if the string is not a number, display an error, else now you will have an integer.
        }
    }
}

这就是我要做的。


0

如果您正在寻找很长的路要走,只需创建一个方法即可:

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;
    }

0

方法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");
}


0

这对我有用:

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}

一个解释将是有条理的。
Peter Mortensen

0

您可以尝试以下方法。它将起作用:

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

变量TextBoxD1.Text中的字符串值将转换为Int32,并将存储在x中。


0

在C#v.7中,您可以使用内联输出参数,而无需其他变量声明:

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

out现在不鼓励在C#中使用参数吗?
Peter Mortensen

-3

这可能对您有帮助; 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.");
        }
    }
}

一个解释将是有条理的。
Peter Mortensen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.