Wie kann ich String in Int konvertieren?

638

Ich habe eine TextBoxD1.Textund möchte sie in eine konvertieren int, um sie in einer Datenbank zu speichern.

Wie kann ich das machen?

turki2009
quelle

Antworten:

1038

Versuche dies:

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

oder noch besser:

int x = 0;

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

Da Int32.TryParsea zurückgegeben wird bool, können Sie den Rückgabewert verwenden, um Entscheidungen über die Ergebnisse des Analyseversuchs zu treffen:

int x = 0;

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

Wenn Sie neugierig sind, lässt sich der Unterschied zwischen Parseund TryParseam besten folgendermaßen zusammenfassen:

Die TryParse-Methode ähnelt der Parse-Methode, außer dass die TryParse-Methode keine Ausnahme auslöst, wenn die Konvertierung fehlschlägt. Es entfällt die Notwendigkeit, die Ausnahmebehandlung zum Testen auf eine FormatException zu verwenden, falls s ungültig ist und nicht erfolgreich analysiert werden kann. - MSDN

Andrew Hare
quelle
3
Was ist, wenn die Ganzzahl 64 Bit ist oder wie "aslkdlksadjsd" aussieht? Ist das noch sicher?
Jonny
6
@ Jonny Int64.Parse(). Wenn die Eingabe nicht int ist, erhalten Sie eine Ausführung und einen Stack-Trace mit Int64.Parseoder den Booleschen Falsemit Int64.TryParse(), sodass Sie eine if-Anweisung wie benötigen if (Int32.TryParse(TextBoxD1.Text, out x)) {}.
1
Sie können auch versuchen, die Variable in TryParse zu initialisieren, wenn sie nur innerhalb der Erfolgsbedingung verwendet wird. Beispiel: Int32.TryParse (TextBoxD1.Text, out int x))
simplysiby
5
Vielleicht ist dies für alle anderen unglaublich offensichtlich, aber für Noobish-Leute setzt 'out x' den Wert von x auf den String-Cast-as-Integer, wenn das Casting erfolgreich ist. In diesem Fall ist x = 0, wenn die Zeichenfolge nicht ganzzahlige Zeichen enthält, oder x = Wert der Zeichenfolge als Ganzzahl. Das Schöne ist also, dass dies ein kurzer Ausdruck ist, der Ihnen sagt, ob das Casting erfolgreich ist oder nicht, UND die Cast-Ganzzahl gleichzeitig in einer Variablen speichert. Offensichtlich möchten Sie oft über der Zeile mit 'else {// string parsed is not integer, daher ein Code, um diese Situation zu behandeln}'
fortfahren
@Roberto ok, aber es ist möglich, dass der Benutzer (entweder versehentlich oder absichtlich) einen solchen "aslkdlksadjsd" -Wert in ein Textfeld eingibt! Sollte unser Programm abstürzen?
Serpooshan
55
Convert.ToInt32( TextBoxD1.Text );

Verwenden Sie diese Option, wenn Sie sicher sind, dass der Inhalt des Textfelds gültig ist int. Eine sicherere Option ist

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

Dadurch erhalten Sie einen Standardwert, den Sie verwenden können. Int32.TryParseGibt auch einen booleschen Wert zurück, der angibt, ob er analysiert werden konnte oder nicht, sodass Sie ihn sogar als Bedingung für eine ifAnweisung verwenden können.

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}
Babak Naffas
quelle
-1 RE. "Dadurch erhalten Sie einen Standardwert, den Sie verwenden können." Wenn Sie val meinen, erwarten Sie Probleme: "Dieser Parameter wird nicht initialisiert übergeben. Jeder ursprünglich im Ergebnis angegebene Wert wird überschrieben." [Ref. docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2
6
Vor 10 Jahren entschuldigte ich mich.
Babak Naffas
37
int.TryParse()

Es wird nicht geworfen, wenn der Text nicht numerisch ist.

n8wrl
quelle
Das ist besser als die beiden anderen. Benutzereingaben haben wahrscheinlich das falsche Format. Dieser ist effizienter als die Verwendung der Ausnahmebehandlung, wie sie die anderen erfordern.
OnkelO
Genau. Es wird false zurückgegeben, wenn die Konvertierung fehlgeschlagen ist.
n8wrl
21
int myInt = int.Parse(TextBoxD1.Text)

Ein anderer Weg wäre:

bool isConvertible = false;
int myInt = 0;

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

Der Unterschied zwischen den beiden besteht darin, dass der erste eine Ausnahme auslösen würde, wenn der Wert in Ihrem Textfeld nicht konvertiert werden kann, während der zweite nur false zurückgeben würde.

Andre Kraemer
quelle
Die obige boolesche Variable ist sehr nützlich. Wir verwenden den konvertierten Wert für den Vergleich, sagen wir in einer if-Klausel. code int NumericJL; bool isNum = int.TryParse (nomeeJobBand, out NumericJL); if (isNum) // Der zurückbehaltene JL kann auf int übertragen werden und dann zum Vergleich vorgehen {if (! (NumericJL> = 6)) {// Nominate} // else {}}
baymax
16

Sie müssen die Zeichenfolge analysieren und sicherstellen, dass sie wirklich das Format einer Ganzzahl hat.

Der einfachste Weg ist folgender:

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
}
Jacob
quelle
14

Seien Sie vorsichtig, wenn Sie Convert.ToInt32 () für ein Zeichen verwenden!
Es wird der UTF-16- Code des Zeichens zurückgegeben!

Wenn Sie mit dem [i]Indexierungsoperator nur an einer bestimmten Position auf die Zeichenfolge zugreifen , wird a charund nicht a string!

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

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

int x = Convert.ToInt32(input[indexOfSeven].toString());  // Returns 7
Mong Zhu
quelle
11
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

Die TryParse-Anweisung gibt einen Booleschen Wert zurück, der angibt, ob die Analyse erfolgreich war oder nicht. Wenn dies erfolgreich war, wird der analysierte Wert im zweiten Parameter gespeichert.

Weitere Informationen finden Sie unter Int32.TryParse-Methode (String, Int32) .

Jorelli
quelle
11

Geniesse es...

int i = 0;
string s = "123";
i =int.Parse(s);
i = Convert.ToInt32(s);
Salim Latif Waigaonkar
quelle
10

Zwar gibt es hier bereits viele Lösungen, die beschreiben int.Parse , fehlt in allen Antworten etwas Wichtiges. Typischerweise unterscheiden sich die Zeichenfolgendarstellungen von numerischen Werten je nach Kultur. Elemente numerischer Zeichenfolgen wie Währungssymbole, Gruppen- (oder Tausender-) Trennzeichen und Dezimaltrennzeichen variieren je nach Kultur.

Wenn Sie eine robuste Methode zum Parsen einer Zeichenfolge in eine Ganzzahl erstellen möchten, ist es daher wichtig, die Kulturinformationen zu berücksichtigen. Wenn Sie dies nicht tun, werden die aktuellen Kultureinstellungen verwendet. Das könnte einen Benutzer ziemlich böse überraschen - oder noch schlimmer, wenn Sie Dateiformate analysieren. Wenn Sie nur Englisch analysieren möchten, machen Sie es am besten einfach explizit, indem Sie die zu verwendenden Kultureinstellungen angeben:

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

Weitere Informationen finden Sie in CultureInfo, insbesondere in NumberFormatInfo auf MSDN.

atlaste
quelle
8

Sie können Ihre eigene Erweiterungsmethode schreiben

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

Und wo immer im Code einfach anrufen

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

In diesem konkreten Fall

int yourValue = TextBoxD1.Text.ParseInt();
Miroslav Holec
quelle
Sollte die Klasse nicht statt aufgerufen StringExtensionswerden IntegerExtensions, da diese Erweiterungsmethoden auf a stringund nicht auf a wirken int?
Shiva
7

Wie in der TryParse-Dokumentation erläutert , gibt TryParse () einen Booleschen Wert zurück, der angibt, dass eine gültige Nummer gefunden wurde:

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
}
JeffH
quelle
7
int x = Int32.TryParse(TextBoxD1.Text, out x) ? x : 0;
Mohammad Rahman
quelle
Prägnant & bietet Standard 👍
Zeek2
6

Sie können entweder verwenden,

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

oder

int i = int.Parse(TextBoxD1.Text);
Sackgasse
quelle
Wie unterscheidet sich das von früheren Antworten?
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;
}
Jsprings
quelle
In diesem Fall wäre eine Standardeinstellung keine gute Idee. Wenn überhaupt ein Ausfall erforderlich ist, empfehle ich die Rückgabe von 0.
Prageeth Saravanan
5

Sie können eine Zeichenfolge in C # in int konvertieren, indem Sie:

Funktionen der convert - Klasse , dh Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()oder durch die Verwendung Parseund TryParseFunktionen. Beispiele finden Sie hier .

Atif
quelle
Wie unterscheidet sich das von früheren Antworten?
Peter Mortensen
4

Sie können auch eine Erweiterungsmethode verwenden , damit diese besser lesbar ist (obwohl alle bereits an die regulären Analysefunktionen gewöhnt sind).

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

Und dann können Sie es so nennen:

  1. Wenn Sie sicher sind, dass Ihre Zeichenfolge eine Ganzzahl ist, wie "50".

    int num = TextBoxD1.Text.ParseToInt32();
  2. Wenn Sie sich nicht sicher sind und Abstürze verhindern möchten.

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

Um es dynamischer zu gestalten, sodass Sie es auch auf Double, Float usw. analysieren können, können Sie eine generische Erweiterung erstellen.

Mischa Zaslavsky
quelle
4

Die Umwandlung von stringzu intkönnen erfolgen: int, Int32, Int64und anderen Datentypen reflektieren Integer - Datentypen in .NET

Das folgende Beispiel zeigt diese Konvertierung:

Dieses Datenadapterelement show (zur Information) wurde auf den Wert int initialisiert. Das gleiche kann direkt gemacht werden wie

int xxiiqVal = Int32.Parse(strNabcd);

Ex.

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

Link, um diese Demo zu sehen .

Edwin b
quelle
4

Das würde reichen

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

Oder Sie können verwenden

int xi = Int32.Parse(x);

Weitere Informationen finden Sie im Microsoft Developer Network

Paddler
quelle
Wie unterscheidet sich das von früheren Antworten?
Peter Mortensen
4

Sie können wie folgt ohne TryParse oder eingebaute Funktionen vorgehen:

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;
}
fauler Entwickler
quelle
convertToInt ("1234") gibt 10000 ...... wenn Sie die Antwort von jemand anderem kopieren wollen, kopieren Sie zumindest das Ganze
SerenityNow
Vergleiche mich nicht mit dir selbst.
Füge
@SerenityNow können Sie jetzt überprüfen. Es war Tippfehler.
fauler Entwickler
1
Unter Bezugnahme auf Ihre ID wird ein fauler Entwickler eine solche Methode nicht erstellen! ; D gut
S.Serpooshan
3
int i = Convert.ToInt32(TextBoxD1.Text);
deepu
quelle
Eine Erklärung wäre angebracht. Wie unterscheidet es sich beispielsweise von Babak Naffas 'Antwort ?
Peter Mortensen
2

Sie können Zeichenfolgen mithilfe der Analysemethode in einen ganzzahligen Wert konvertieren.

Z.B:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);
Codemaker
quelle
Wie unterscheidet sich das von früheren Antworten?
Peter Mortensen
2

So mache ich das immer:

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

So würde ich es machen.

Isaac Newton
quelle
0

Wenn Sie auf der Suche nach einem langen Weg sind, erstellen Sie einfach Ihre einzige Methode:

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;
    }
Juli tippt
quelle
0

METHODE 1

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

Methode 2

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

Methode 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");
}
Bill Moore
quelle
0

Dieser Code funktioniert für mich in Visual Studio 2010:

int someValue = Convert.ToInt32(TextBoxD1.Text);
Sarib Shamim
quelle
Ja, aber wie unterscheidet es sich von früheren Antworten?
Peter Mortensen
0

Das funktioniert bei mir:

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}
Sheridan Irvine
quelle
Eine Erklärung wäre angebracht.
Peter Mortensen
0

Sie können Folgendes versuchen. Es wird klappen:

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

Der Zeichenfolgenwert in der Variablen TextBoxD1.Text wird in Int32 konvertiert und in x gespeichert.

Kartikey Kushwaha
quelle
0

In C # v.7 können Sie einen Inline-Out-Parameter ohne zusätzliche Variablendeklaration verwenden:

int.TryParse(TextBoxD1.Text, out int x);
Max Miller
quelle
Werden outParameter in C # jetzt nicht entmutigt?
Peter Mortensen
-3

Dies kann Ihnen helfen; 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.");
        }
    }
}
jan koekepan
quelle
Eine Erklärung wäre angebracht.
Peter Mortensen