Je sais qu'il est possible de vérifier si la valeur d'une zone de texte ou d'une variable est numérique à l'aide d'instructions try/catch, mais IsNumeric
est so beaucoup plus simple. L'un de mes projets en cours nécessite la récupération de valeurs à partir de zones de texte. Malheureusement, il est écrit en C #.
Je comprends qu'il existe un moyen d'activer la fonction Visual Basic IsNumeric
dans Visual C # en ajoutant une référence à Visual Basic, bien que je ne connaisse pas la syntaxe correspondante. Ce qu'il me faut, c'est une procédure claire et concise pour activer la fonction IsNumeric
en C #. Je ne prévois utiliser aucune autre fonction propre à Visual Basic.
public bool IsNumeric(string value)
{
return value.All(char.IsNumber);
}
Vous pouvez faire une méthode d'assistance. Quelque chose comme:
public bool IsNumeric(string input) {
int test;
return int.TryParse(input, out test);
}
Pour voler totalement la réponse de Bill, vous pouvez créer une méthode d'extension et utiliser du sucre syntaxique pour vous aider.
Créer un fichier de classe, StringExtensions.cs
Contenu:
public static class StringExt
{
public static bool IsNumeric(this string text)
{
double test;
return double.TryParse(text, out test);
}
}
EDIT: Ceci concerne la syntaxe C # 7 mise à jour. Déclarer le paramètre en ligne.
public static class StringExt
{
public static bool IsNumeric(this string text)
{
return double.TryParse(text, out double test);
}
}
Méthode d'appel comme celle-ci:
var text = "I am not a number";
text.IsNumeric() //<--- returns false
En utilisant C # 7 (.NET Framework 4.6.2), vous pouvez écrire une fonction IsNumeric en une ligne:
public bool IsNumeric(string val) => int.TryParse(val, out int result);
Notez que la fonction ci-dessus ne fonctionnera que pour les entiers (Int32). Mais vous pouvez implémenter des fonctions correspondantes pour d'autres types de données numériques, telles que long, double, etc.
Essayez de suivre l'extrait de code.
double myVal = 0;
String myVar = "Not Numeric Type";
if (Double.TryParse(myVar , out myNum)) {
// it is a number
} else {
// it is not a number
}
http://msdn.Microsoft.com/en-us/library/wkze6zky.aspx
menu: Projet -> Ajouter une référence
click: assemblages, framework
Mettez une coche sur Microsoft.VisualBasic.
Hit OK.
Ce lien concerne Visual Studio 2013, vous pouvez utiliser le menu déroulant "Autres versions" pour différentes versions de visual studio.
Dans tous les cas, vous devez ajouter une référence à .NET Assembly "Microsoft.VisualBasic".
En haut de votre fichier c #, vous avez besoin de:
using Microsoft.VisualBasic;
Ensuite, vous pouvez regarder à écrire le code.
Le code serait quelque chose comme:
private void btnOK_Click(object sender, EventArgs e)
{
if ( Information.IsNumeric(startingbudget) )
{
MessageBox.Show("This is a number.");
}
}
Je gère généralement des choses comme celle-ci avec une méthode d'extension. Voici un moyen implémenté dans une application console:
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
CheckIfNumeric("A");
CheckIfNumeric("22");
CheckIfNumeric("Potato");
CheckIfNumeric("Q");
CheckIfNumeric("A&^*^");
Console.ReadLine();
}
private static void CheckIfNumeric(string input)
{
if (input.IsNumeric())
{
Console.WriteLine(input + " is numeric.");
}
else
{
Console.WriteLine(input + " is NOT numeric.");
}
}
}
public static class StringExtensions
{
public static bool IsNumeric(this string input)
{
return Regex.IsMatch(input, @"^\d+$");
}
}
}
A n'est pas numérique.
22 est numérique.
La pomme de terre n'est pas numérique.
Q n'est pas numérique.
A & ^ * ^ n'est PAS numérique.
Remarque, voici quelques autres moyens de vérifier les numéros en utilisant RegEx.
Il est à noter que l'on peut vérifier les caractères de la chaîne par rapport aux catégories Unicode - nombres, majuscules, minuscules, devises et plus. Voici deux exemples de vérification de nombres dans une chaîne à l'aide de Linq:
var containsNumbers = s.Any(Char.IsNumber);
var isNumber = s.All(Char.IsNumber);
Pour plus de clarté, la syntaxe ci-dessus est une version abrégée de:
var containsNumbers = s.Any(c=>Char.IsNumber(c));
var isNumber = s.All(c=>Char.IsNumber(c));
Lien vers les catégories unicode sur MSDN: