web-dev-qa-db-fra.com

C # test pour voir si une chaîne est un entier?

Je suis curieux de savoir s'il existe quelque chose dans le langage c # ou le framework .net qui teste pour voir si quelque chose est un entier

if (x is an int)
   // Do something

Il me semble que oui, mais je ne suis qu’un étudiant en programmation de première année, alors je ne le sais pas.

59
Alex

Utilisez la méthode int.TryParse .

string x = "42";
int value;
if(int.TryParse(x, out value))
  // Do something

S'il réussit l'analyse, il retournera la valeur true et le résultat out aura sa valeur sous forme d'entier.

142
Brandon

Je pense que je me souviens de la comparaison des performances entre int.TryParse et int.Parse Regex et char.IsNumber et char.IsNumber était le plus rapide. Quoi qu'il en soit, quelle que soit la performance, voici une autre façon de le faire.

        bool isNumeric = true;
        foreach (char c in "12345")
        {
            if (!Char.IsNumber(c))
            {
                isNumeric = false;
                break;
            }
        }
15
Wil P

Pour la solution Wil P (voir ci-dessus), vous pouvez également utiliser LINQ.

var x = "12345";
var isNumeric = !string.IsNullOrEmpty(x) && x.All(Char.IsDigit);
11
Georg

Si vous voulez juste vérifier le type de variable passée, vous pourriez probablement utiliser:

    var a = 2;
    if (a is int)
    {
        //is integer
    }
    //or:
    if (a.GetType() == typeof(int))
    {
        //is integer
    }
11
rochal

c'est simple ... utilisez ce morceau de code

bool anyname = your_string_Name.All(char.IsDigit);

il retournera vrai si votre chaîne a un entier autre sage faux ...

3
Sibghat

Cette fonction vous dira si votre chaîne contient SEULEMENT les caractères 0123456789.

private bool IsInt(string sVal)
{
    foreach (char c in sVal)
    {
         int iN = (int)c;
         if ((iN > 57) || (iN < 48))
            return false;
    }
    return true;
}

C'est différent de int.TryParse () qui vous dira si votre chaîne POURRAIT ÊTRE un entier.
par exemple. "123\r\n" retournera TRUE de int.TryParse () mais FALSE de la fonction ci-dessus.

... Cela dépend de la question à laquelle vous devez répondre.

2
mike
private bool isNumber(object p_Value)
    {
        try
        {
            if (int.Parse(p_Value.ToString()).GetType().Equals(typeof(int)))
                return true;
            else
                return false;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

Quelque chose que j'ai écrit il y a quelque temps. Quelques bons exemples ci-dessus, mais juste mes 2 cents.

1
Kwekuq

Peut-être que cela peut être une autre solution

try
{
    Console.Write("write your number : ");
    Console.WriteLine("Your number is : " + int.Parse(Console.ReadLine()));
}
catch (Exception x)
{
    Console.WriteLine(x.Message);
}
Console.ReadLine();
1
Hari Purnomo

Si vous souhaitez uniquement vérifier s'il s'agit d'une chaîne ou non , vous pouvez placer les mots clés "out int" directement dans un appel de méthode. Selon le site Web dotnetperls.com, les anciennes versions de C # n'autorisent pas cette syntaxe. En faisant cela, vous pouvez réduire le nombre de lignes du programme.

string x = "text or int";
if (int.TryParse(x, out int output))
{
  // Console.WriteLine(x);
  // x is an int
  // Do something
}
else
{
  // x is not an int
}

Si vous voulez aussi obtenir les valeurs int, vous pouvez écrire comme ceci.

Méthode 1

string x = "text or int";
int value = 0;
if(int.TryParse(x, out value))
{
  // x is an int
  // Do something
}
  else
{
  // x is not an int
}

Méthode 2

string x = "text or int";
int num = Convert.ToInt32(x);
Console.WriteLine(num);

Référence: https://www.dotnetperls.com/parse

1
DxTx

Je code depuis environ 2 semaines et j'ai créé une logique simple pour valider qu'un entier a été accepté.

    Console.WriteLine("How many numbers do you want to enter?"); // request a number
    string input = Console.ReadLine(); // set the input as a string variable
    int numberTotal; // declare an int variable

    if (!int.TryParse(input, out numberTotal)) // process if input was an invalid number
    {
        while (numberTotal  < 1) // numberTotal is set to 0 by default if no number is entered
        {
            Console.WriteLine(input + " is an invalid number."); // error message
            int.TryParse(Console.ReadLine(), out numberTotal); // allows the user to input another value
        }

    } // this loop will repeat until numberTotal has an int set to 1 or above

vous pouvez également utiliser ce qui précède dans une boucle FOR si vous préférez ne pas déclarer une action en tant que troisième paramètre de la boucle, tel que

    Console.WriteLine("How many numbers do you want to enter?");
    string input2 = Console.ReadLine();

    if (!int.TryParse(input2, out numberTotal2))
    {
        for (int numberTotal2 = 0; numberTotal2 < 1;)
        {
            Console.WriteLine(input2 + " is an invalid number.");
            int.TryParse(Console.ReadLine(), out numberTotal2);
        }

    }

si vous ne voulez pas de boucle, supprimez simplement l'attache de boucle entière

0
Shujin