web-dev-qa-db-fra.com

Comment puis-je convertir String en Int?

J'ai un TextBoxD1.Text et je veux le convertir en un int pour le stocker dans une base de données.

Comment puis-je faire ceci?

565
turki2009

Essaye ça:

_int x = Int32.Parse(TextBoxD1.Text);
_

ou mieux encore:

_int x = 0;

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

De plus, puisque Int32.TryParse retourne un bool, vous pouvez utiliser sa valeur de retour pour prendre des décisions concernant les résultats de la tentative d'analyse:

_int x = 0;

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

Si vous êtes curieux, la différence entre Parse et TryParse se résume de la manière suivante:

La méthode TryParse est semblable à la méthode Parse, sauf que la méthode TryParse ne lève pas d'exception si la conversion échoue. Cela élimine la nécessité d'utiliser la gestion des exceptions pour tester une exception FormatException dans le cas où s n'est pas valide et ne peut pas être analysé correctement. - MSDN

932
Andrew Hare
Convert.ToInt32( TextBoxD1.Text );

Utilisez cette option si vous êtes sûr que le contenu de la zone de texte est un entier valide. Une option plus sûre est

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

Cela vous donnera une valeur par défaut que vous pourrez utiliser. Int32.TryParse renvoie également une valeur booléenne indiquant si l'analyse a été effectuée ou non. Vous pouvez même l'utiliser comme condition d'une instruction if.

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

Il ne jettera pas si le texte n'est pas numérique.

33
n8wrl
int myInt = int.Parse(TextBoxD1.Text)

Une autre façon serait:

bool isConvertible = false;
int myInt = 0;

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

La différence entre les deux réside dans le fait que le premier lève une exception si la valeur de votre zone de texte ne peut pas être convertie, tandis que le second renvoie simplement false.

19
Andre Kraemer

Vous devez analyser la chaîne et vous assurer qu'elle est vraiment au format d'un entier.

Le moyen le plus simple est le suivant:

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
}
15
Jacob

Profitez-en...

int i = 0;
string s = "123";
i =int.Parse(s);
i = Convert.ToInt32(s);
10
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

L'instruction TryParse renvoie un booléen indiquant si l'analyse a réussi ou non. Si cela réussit, la valeur analysée est stockée dans le deuxième paramètre.

Voir méthode Int32.TryParse (String, Int32) pour plus d'informations.

10
jorelli

Soyez prudent lorsque vous utilisez Convert.ToInt32 () sur un caractère!
Il retournera le TF-16 Code du personnage!

Si vous n'accédez à la chaîne que dans une certaine position à l'aide de l'opérateur d'indexation [i], il retournera un char et non un string!

String input = "123678";

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

int x = Convert.ToInt32(input[4].toString());  // returns 7
8
Mong Zhu

Bien qu'il existe déjà de nombreuses solutions décrivant int.Parse, il manque quelque chose d'important dans toutes les réponses. Généralement, les représentations sous forme de chaîne de valeurs numériques diffèrent selon les cultures. Les éléments de chaînes numériques tels que les symboles monétaires, les séparateurs de groupe (ou des milliers) et les séparateurs décimaux varient en fonction de la culture.

Si vous souhaitez créer un moyen robuste d’analyser une chaîne en un entier, il est donc important de prendre en compte les informations de culture. Si vous ne le faites pas, le paramètres de culture actuels sera utilisé. Cela pourrait donner à un utilisateur une surprise plutôt désagréable, voire pire, si vous analysez les formats de fichiers. Si vous souhaitez simplement analyser l'anglais, il est préférable de l'expliciter simplement en spécifiant les paramètres de culture à utiliser:

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

Pour plus d'informations, consultez CultureInfo, en particulier NumberFormatInfo sur MSDN.

8
atlaste

Vous pouvez écrire votre propre méthode extesion

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

Et où que ce soit dans le code, il suffit d'appeler

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

dans ce cas concret

int yourValue = TextBoxD1.Text.ParseInt();
7
Miroslav Holec

Comme expliqué dans la documentation TryParse , TryParse () renvoie un booléen indiquant qu'un nombre valide a été trouvé:

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
JeffH

Vous pouvez utiliser soit,

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

ou

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

Vous pouvez convertir une chaîne en int en C # en utilisant:

Fonctions de la classe de conversion, à savoir Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64() ou en utilisant Parse et TryParse Fonctions. Des exemples sont donnés ici .

4
Atif
//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;
}
4
Jsprings
int x = Int32.TryParse(TextBoxD1.Text, out x)?x:0;
4
Mohammad Rahman

La conversion de string à int peut être effectuée pour: int, Int32, Int64 et d'autres types de données reflétant des types de données entiers dans .NET

L'exemple ci-dessous montre cette conversion:

Cet élément de l'adaptateur de données show (pour info) est initialisé à la valeur int. La même chose peut être faite directement comme,

int xxiiqVal = Int32.Parse(strNabcd);

Ex.

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

Lien pour voir cette démo .

4
Edwin b

Cela ferait

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

Ou vous pouvez utiliser

int xi=Int32.Parse(x);

Reportez-vous à réseau de développeurs Microsoft pour plus d'informations

4
Tony Stark

vous pouvez faire comme ci-dessous sans fonctions TryParse ou intégrées

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

Vous pouvez aussi utiliser une méthode d'extension , donc elle sera plus lisible (bien que tout le monde soit déjà habitué aux fonctions normales d'analyse).

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

Et ensuite, vous pouvez l'appeler ainsi:

  1. Si vous êtes sûr que votre chaîne est un entier, comme "50".

    int num = TextBoxD1.Text.ParseToInt32();
    
  2. Si vous n'êtes pas sûr et que vous souhaitez éviter les accidents.

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

Pour le rendre plus dynamique, afin que vous puissiez l’analyser également pour doubler, flotter, etc., vous pouvez créer une extension générique.

3
Misha Zaslavsky

la façon dont je fais toujours c'est comme ça

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

voici comment je le ferais, j'espère que cela aide. (:

2
Isaac Newton

Vous pouvez convertir une chaîne en valeur entière à l'aide de la méthode parse.

Par exemple:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);
2
Codemaker
int i = Convert.ToInt32(TextBoxD1.Text);
2
deepu

Le moyen le plus simple consiste à utiliser un utilitaire d'extension comme ceci:

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

L'utilisation est si simple:

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

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

Vous pouvez essayer ça, ça va marcher:

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

La valeur de chaîne dans la variable TextBoxD1.Text sera convertie en Int32 et sera stockée dans x.

0
Kartikey Kushwaha

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

Si vous recherchez le chemin le plus long, créez simplement votre seule méthode:

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
jul taps

Ce code fonctionne pour moi dans Visual Studio 2010:

int someValue = Convert.ToInt32(TextBoxD1.Text);
0
Sarib Shamim