Функция IsNumeric в С#

Я знаю, что можно проверить, является ли значение текстового поля или переменной числовым с помощью операторов try/catch, но IsNumeric намного проще. Один из моих текущих проектов требует восстановления значений из текстовых полей. К сожалению, он написан на С#.

Я понимаю, что есть способ включить функцию Visual Basic IsNumeric в Visual С#, добавив ссылку на Visual Basic, хотя я не знаю синтаксиса для нее. Мне нужна четкая и краткая пошаговая инструкция для включения функции IsNumeric в С#. Я не планирую использовать любые другие функции, принадлежащие к Visual Basic.

Ответ 1

public bool IsNumeric(string value)
{
    return value.All(char.IsNumber);
}

Ответ 2

Чтобы полностью украсть ответ билла, вы можете создать метод расширения и использовать синтаксический сахар, чтобы помочь вам.

Создайте файл класса StringExtensions.cs

Содержание:

public static class StringExt
{
    public static bool IsNumeric(this string text)
    {
        double test;
        return double.TryParse(text, out test);
    }
}

ОБНОВЛЕНИЕ: Это для обновленного синтаксиса С# 7. Объявление параметра в строке.

public static class StringExt
{
    public static bool IsNumeric(this string text) => double.TryParse(text, out double test);

}

Вызвать метод так:

var text = "I am not a number";
text.IsNumeric()  //<--- returns false

Ответ 3

Вы можете создать вспомогательный метод. Что-то вроде:

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

Ответ 4

http://msdn.microsoft.com/en-us/library/wkze6zky.aspx

меню: Проект → Добавить ссылку

click: сборки, рамки

Поставьте галочку в Microsoft.VisualBasic.

Нажмите ОК.

Эта ссылка предназначена для Visual Studio 2013, вы можете использовать раскрывающийся список "Другие версии" для разных версий визуальной студии.

Во всех случаях вам нужно добавить ссылку на сборку .NET "Microsoft.VisualBasic".

В верхней части вашего файла С#, который вы указали:

using Microsoft.VisualBasic;

Затем вы можете посмотреть, как писать код.

Код будет выглядеть примерно так:

   private void btnOK_Click(object sender, EventArgs e)
   {
      if ( Information.IsNumeric(startingbudget) )
      {
         MessageBox.Show("This is a number.");
      }
   }

Ответ 5

Используя С# 7 (.NET Framework 4.6.2), вы можете написать функцию IsNumeric как однострочный:

public bool IsNumeric(string val) => int.TryParse(val, out int result);

Обратите внимание, что вышеприведенная функция будет работать только для целых чисел (Int32). Но вы можете реализовать соответствующие функции для других числовых типов данных, таких как long, double и т.д.

Ответ 6

Попробуйте выполнить фрагмент кода.

double myVal = 0;
String myVar = "Not Numeric Type";

if (Double.TryParse(myVar , out myNum)) {
  // it is a number
} else {
  // it is not a number
}

Ответ 7

Обычно я обрабатываю подобные вещи с помощью метода расширения. Вот один из способов, реализованных в консольном приложении:

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 не является числовым.

22 является числовым.

Картофель НЕ является числовым.

Q не является числовым.

A & ^ * ^ НЕ является числовым.

Обратите внимание, что еще несколько способов проверки чисел с помощью RegEx.

Ответ 8

Стоит отметить, что можно проверять символы в строке по категориям Unicode - числа, прописные, строчные, валюты и многое другое. Вот два примера проверки чисел в строке с помощью Linq:

var containsNumbers = s.Any(Char.IsNumber);
var isNumber = s.All(Char.IsNumber);

Для ясности приведенный выше синтаксис является сокращенной версией:

var containsNumbers = s.Any(c=>Char.IsNumber(c));
var isNumber = s.All(c=>Char.IsNumber(c));

Ссылка на категории юникода в MSDN:

Перечисление UnicodeCategory

Ответ 9

Числовое значение может быть достигнуто многими способами, но я использую свой путь

public bool IsNumeric(string value)
{
    bool isNumeric = true;
    char[] digits = "0123456789".ToCharArray();
    char[] letters = value.ToCharArray();
    for (int k = 0; k < letters.Length; k++)
    {
        for (int i = 0; i < digits.Length; i++)
        {
            if (letters[k] != digits[i])
            {
                isNumeric = false;
                break;
            }
        }
    }
    return isNumeric;
}