web-dev-qa-db-fra.com

Fonction isNumeric en c #

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.

8
user3352070
public bool IsNumeric(string value)
{
    return value.All(char.IsNumber);
}
18
CodeDog

Vous pouvez faire une méthode d'assistance. Quelque chose comme:

public bool IsNumeric(string input) {
    int test;
    return int.TryParse(input, out test);
}
13
Bill

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
11
Cubicle.Jockey

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.

2
andersh

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
}
2
user353gre3

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.");
      }
   }
2
Derek

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+$");
        }
    }
}

Sortie:

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.

1
Eric Scherrer

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:

Énumération UnicodeCategory

0
pasx