Come posso convertire String in Int?


Risposte:


1039

Prova questo:

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

o meglio ancora:

int x = 0;

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

Inoltre, poiché Int32.TryParserestituisce a boolè possibile utilizzare il valore restituito per prendere decisioni sui risultati del tentativo di analisi:

int x = 0;

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

Se sei curioso, la differenza tra Parseed TryParseè meglio riassunta in questo modo:

Il metodo TryParse è simile al metodo Parse, tranne per il fatto che il metodo TryParse non genera un'eccezione se la conversione non riesce. Elimina la necessità di utilizzare la gestione delle eccezioni per verificare una FormatException nel caso in cui s non sia valido e non possa essere analizzato correttamente. - MSDN


3
Cosa succede se il numero intero è 64 bit o appare come "aslkdlksadjsd"? È ancora sicuro?
Jonny il

6
@Jonny Int64.Parse(). Se l'input è non-int, otterrai un'esecuzione e una traccia dello stack con Int64.Parseo il valore booleano Falsecon Int64.TryParse(), quindi avresti bisogno di un'istruzione if, come if (Int32.TryParse(TextBoxD1.Text, out x)) {}.

1
È inoltre possibile provare a inizializzare la variabile in TryParse se verrà utilizzata solo all'interno della condizione di successo. ad esempio: Int32.TryParse (TextBoxD1.Text, out int x))
simplysiby

5
Forse questo è incredibilmente ovvio per tutti gli altri, ma per le persone noobish ciò che fa 'out x' è impostare il valore di x sul cast-string-as-integer, se il casting ha successo. Vale a dire in questo caso, x = 0 se la stringa ha caratteri non interi o x = valore di stringa come intero altrimenti. Quindi la cosa bella è che questa è una breve espressione che ti dice se il casting ha successo o no, E memorizza il numero intero di cast in una variabile contemporaneamente. Ovviamente spesso vorresti continuare sopra la riga con 'else {// stringa analizzata non è un numero intero, quindi un codice per gestire questa situazione}'
Will Croxford,

@Roberto ok, ma è possibile che l'utente (per errore o intenzionalmente) digiti tale valore "aslkdlksadjsd" all'interno di una casella di testo! quindi il nostro programma dovrebbe andare in crash?
S. Serpooshan,

55
Convert.ToInt32( TextBoxD1.Text );

Utilizzalo se sei sicuro che il contenuto della casella di testo sia valido int. Un'opzione più sicura è

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

Questo ti fornirà un valore predefinito che puoi usare. Int32.TryParserestituisce anche un valore booleano che indica se è stato in grado di analizzare o meno, quindi è anche possibile utilizzarlo come condizione di ifun'istruzione.

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}

-1 RE. "Questo ti fornirà un valore predefinito che puoi usare." Se intendi val, aspettati un problema: "Questo parametro viene passato non inizializzato; qualsiasi valore originariamente fornito nel risultato verrà sovrascritto." [Ref. docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2

6
10 anni fa mi scuso.
Babak Naffas,

37
int.TryParse()

Non verrà generato se il testo non è numerico.


Questo è meglio degli altri due. È probabile che l'input dell'utente abbia un formato errato. Questo è più efficiente dell'utilizzo della gestione delle eccezioni come richiedono gli altri.
Zio

Esattamente. Restituisce false se la conversione non è riuscita.
n8wrl,

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

Un altro modo sarebbe:

bool isConvertible = false;
int myInt = 0;

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

La differenza tra i due è che il primo genererebbe un'eccezione se il valore nella casella di testo non può essere convertito, mentre il secondo restituirà semplicemente false.


La variabile booleana sopra è molto utile stiamo usando il valore convertito per comaprison, diciamo in una clausola if. code int NumericJL; bool isNum = int.TryParse (nomeeJobBand, out NumericJL); if (isNum) // Il JL ritirato è in grado di passare a int quindi andare avanti per il confronto {if (! (NumericJL> = 6)) {// Nominate} // else {}}
baymax

16

Devi analizzare la stringa e devi anche assicurarti che sia veramente nel formato di un numero intero.

Il modo più semplice è questo:

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

Fai attenzione quando usi Convert.ToInt32 () su un carattere!
Restituirà il codice UTF-16 del personaggio!

Se si accede alla stringa solo in una determinata posizione utilizzando l' [i]operatore di indicizzazione, restituirà a chare non 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

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

L'istruzione TryParse restituisce un valore booleano che indica se l'analisi ha avuto esito positivo o meno. Se ha esito positivo, il valore analizzato viene memorizzato nel secondo parametro.

Vedere Metodo Int32.TryParse (String, Int32) per informazioni più dettagliate.



10

Mentre ci sono già molte soluzioni che descrivono int.Parse, manca qualcosa di importante in tutte le risposte. In genere, le rappresentazioni di stringa di valori numerici differiscono per cultura. Gli elementi di stringhe numeriche come simboli di valuta, separatori di gruppi (o migliaia) e separatori decimali variano in base alla cultura.

Se si desidera creare un modo affidabile per analizzare una stringa in un numero intero, è quindi importante tenere conto delle informazioni sulla cultura. In caso contrario, verranno utilizzate le impostazioni di cultura correnti . Ciò potrebbe dare all'utente una brutta sorpresa, o peggio ancora, se stai analizzando i formati di file. Se vuoi solo analizzare l'inglese, è meglio renderlo esplicito, specificando le impostazioni della cultura da usare:

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

Per ulteriori informazioni, leggere su CultureInfo, in particolare NumberFormatInfo su MSDN.


8

Puoi scrivere il tuo metodo di estensione

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

E ovunque nel codice basta chiamare

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 questo caso concreto

int yourValue = TextBoxD1.Text.ParseInt();

La classe non dovrebbe essere chiamata StringExtensionsinvece di IntegerExtensions, poiché questi metodi di estensione agiscono su un stringe non su un int?
Shiva,

7

Come spiegato nella documentazione di TryParse , TryParse () restituisce un valore booleano che indica che è stato trovato un numero valido:

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

Puoi usare uno,

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

o

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

In che cosa differisce dalle risposte precedenti?
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;
}

Il default in questo caso non sarebbe una buona idea. Se è
assolutamente

5

Puoi convertire una stringa in int in C # usando:

Funzioni di classe convertito cioè Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()oppure utilizzando Parsee TryParsefunzioni. Gli esempi sono riportati qui .


In che cosa differisce dalle risposte precedenti?
Peter Mortensen,

4

È inoltre possibile utilizzare un metodo di estensione , quindi sarà più leggibile (sebbene tutti siano già abituati alle normali funzioni di analisi).

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

E poi puoi chiamarlo in questo modo:

  1. Se sei sicuro che la tua stringa sia un numero intero, come "50".

    int num = TextBoxD1.Text.ParseToInt32();
  2. Se non si è sicuri e si desidera prevenire arresti anomali.

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

Per renderlo più dinamico, in modo da poterlo analizzare anche in double, float, ecc., Puoi creare un'estensione generica.


4

Conversione di stringa intpuò essere fatto per: int, Int32, Int64e altri tipi di dati che riflette i tipi di dati interi in NET

L'esempio seguente mostra questa conversione:

Questo mostra (per informazioni) elemento adattatore dati inizializzato sul valore int. Lo stesso può essere fatto direttamente come

int xxiiqVal = Int32.Parse(strNabcd);

Ex.

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

Link per vedere questa demo .



4

Puoi fare come di seguito senza TryParse o funzioni integrate:

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") dà 10000 ...... se hai intenzione di copiare la risposta di qualcun altro, almeno copia il tutto
SerenityNow

non confrontarmi con te stesso .. aggiungi invece una soluzione aggiornata .. lol
lazydeveloper l'

@SerenityNow puoi controllare ora. È stato un errore di battitura.
lazydeveloper,

1
riferendosi al tuo ID, un pigro sviluppatore non creerà tale metodo! ; D bene
S. Serpooshan


2

È possibile convertire la stringa in un valore intero con l'aiuto del metodo di analisi.

Per esempio:

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

In che cosa differisce dalle risposte precedenti?
Peter Mortensen,

2

Il modo in cui lo faccio sempre è così:

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

Ecco come lo farei.


0

Se stai cercando una strada lunga, crea il tuo unico metodo:

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

METODO 1

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

METODO 2

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

METODO 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

Questo codice funziona per me in Visual Studio 2010:

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

Sì, ma in cosa differisce dalle risposte precedenti?
Peter Mortensen,

0

Questo funziona per me:

using System;

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

Una spiegazione sarebbe in ordine.
Peter Mortensen,

0

Puoi provare quanto segue. Funzionerà:

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

Il valore di stringa nella variabile TextBoxD1.Text verrà convertito in Int32 e verrà archiviato in x.


0

In C # v.7 è possibile utilizzare un parametro out inline, senza un'ulteriore dichiarazione delle variabili:

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

I outparametri non sono scoraggiati in C # adesso?
Peter Mortensen,

-3

Questo può aiutarti; 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.");
        }
    }
}

Una spiegazione sarebbe in ordine.
Peter Mortensen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.