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

Je suis simplement curieux de savoir s’il y a quelque chose de construit dans le langage c # ou le framework .net qui vérifie si quelque chose est un entier

if (x is an int) // Do something 

Il me semble qu’il y en a peut-être, mais je ne suis qu’une étudiante en programmation de première année, alors je ne sais pas.

Utilisez la méthode int.TryParse .

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

Si elle parsing avec succès, elle retournera true et le résultat de sortie aura la valeur d’un entier.

Je pense que je me souviens avoir examiné une comparaison de performances entre int.TryParse et int.Parse Regex et char.IsNumber et char.IsNumber étaient les plus rapides. 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; } } 

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

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

Si vous voulez simplement vérifier le type de variable transmise, vous pouvez probablement utiliser:

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

Cette fonction vous indiquera si votre chaîne contient UNIQUEMENT les caractères 0123456789.

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

Ceci est différent de int.TryParse () qui vous dira si votre chaîne pourrait être un entier.
par exemple. "123 \ r \ n" renverra TRUE à partir de int.TryParse () mais FALSE à partir de la fonction ci-dessus.

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

c’est simple … utilise ce morceau de code

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

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

Si vous voulez seulement vérifier si c’est 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 # ne permettent pas cette syntaxe. Ce faisant, vous pouvez réduire le nombre de lignes du programme.

 ssortingng 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 souhaitez également obtenir les valeurs int, vous pouvez écrire comme ceci.

Méthode 1

 ssortingng 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

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

Referece: https://www.dotnetperls.com/parse

Je code depuis environ 2 semaines et j’ai créé une logique simple pour valider un nombre entier accepté.

  Console.WriteLine("How many numbers do you want to enter?"); // request a number ssortingng input = Console.ReadLine(); // set the input as a ssortingng 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 comme troisième paramètre de la boucle, par exemple

  Console.WriteLine("How many numbers do you want to enter?"); ssortingng 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, retirez simplement la totalité de l'accolade de la boucle

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

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

il y a une méthode simple dans c # 7

 // if input 10 var input = int.TryParse(Console.ReadLine(), out var output); // input = true, output = 10 // or if input will be "abcd", you will get: // input = false, output = 0 

en entrée, vous aurez faux ou vrai et en sortie, vous aurez converti le nombre s’il peut être converti.