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