Подтвердить что ты не робот

Как проверить, IsNumeric

Возможный дубликат:
Как определить, содержит ли строка число?

В VB есть функция IsNumeric, есть ли что-то подобное в С#?

Чтобы обойти это, я просто написал код:

    if (Int32.Parse(txtMyText.Text.Trim()) > 0)

Мне просто интересно, есть ли лучший способ сделать это.

4b9b3361

Ответ 1

Вы можете написать метод расширения:

public static class Extension
{
    public static bool IsNumeric(this string s)
    {
        float output;
        return float.TryParse(s, out output);
    }
}

Ответ 2

Я думаю, вам нужно нечто более общее. Попробуйте следующее:

public static System.Boolean IsNumeric (System.Object Expression)
{
    if(Expression == null || Expression is DateTime)
        return false;

    if(Expression is Int16 || Expression is Int32 || Expression is Int64 || Expression is Decimal || Expression is Single || Expression is Double || Expression is Boolean)
        return true;

    try 
    {
        if(Expression is string)
            Double.Parse(Expression as string);
        else
            Double.Parse(Expression.ToString());
            return true;
        } catch {} // just dismiss errors but return false
        return false;
    }
}

Надеюсь, что это поможет!

Ответ 3

Вы должны использовать TryParse - Parse выдает исключение, если строка не является допустимым числом - например. если вы хотите проверить допустимое целое число:

int v;
if (Int32.TryParse(textMyText.Text.Trim(), out v)) {
  . . .
}

Если вы хотите проверить допустимое число с плавающей запятой:

double v;
if (Double.TryParse(textMyText.Text.Trim(), out v)) {
  . . .
}

Обратите внимание, что Double.TryParse имеет перегруженную версию с дополнительными параметрами, определяющими различные правила и параметры, управляющие процессом разбора. локализация ('.' или ',') - см. http://msdn.microsoft.com/en-us/library/3s27fasw.aspx.

Ответ 4

Другие ответы предложили использовать TryParse, который может соответствовать вашим потребностям, но самый безопасный способ обеспечить функциональность функции IsNumeric - это ссылка на библиотеку VB и использование функции IsNumeric.

IsNumeric более гибкий, чем TryParse. Например, IsNumeric возвращает true для строки "$100", тогда как методы TryParse возвращаются false.

Чтобы использовать IsNumeric в С#, добавьте ссылку на Microsoft.VisualBasic.dll. Функция является статическим методом класса Microsoft.VisualBasic.Information, поэтому, если вы имеете using Microsoft.VisualBasic;, вы можете сделать это:

if (Information.IsNumeric(txtMyText.Text.Trim())) //...

Ответ 5

Существует метод TryParse, который возвращает bool, указывающий, было ли успешным преобразование.

Ответ 6

Вам следует использовать метод TryParse, который преобразует строковое представление числа в его 32-разрядный эквивалентный знак со знаком. Возвращаемое значение указывает, удалось ли преобразование.

    int intParsed;
    if(int.TryParse(txtMyText.Text.Trim(),out intParsed))
    {
        // perform your code
    }

Ответ 7

Там немного лучший способ:

int valueParsed;
if(Int32.TryParse(txtMyText.Text.Trim(), out valueParsed))
{ ... }

Если вы попытаетесь разобрать текст и его невозможно разобрать, метод Int32.Parse вызовет исключение. Я думаю, что вам лучше использовать метод TryParse, который будет захватывать исключение и сообщить вам как логическое, если бы возникло какое-либо исключение.

Есть много осложнений при анализе текста, который учитывает Int32.Parse. Глупо дублировать усилия. Таким образом, это, скорее всего, подход, сделанный VB IsNumeric. Вы также можете настроить правила синтаксического анализа через перечисление NumberStyles, чтобы разрешить шестнадцатеричный, десятичный, валютный и несколько других стилей.

Другим распространенным подходом для приложений, отличных от веб-приложений, является ограничение ввода текстового поля только для принятия символов, которые будут обрабатываться в целые числа.

EDIT: вы можете принять большее количество входных форматов, таких как денежные значения ( "100 долларов США" ) и показатели ( "1E4" ), указав конкретные NumberStyles:

int valueParsed;
if(Int32.TryParse(txtMyText.Text.Trim(), NumberStyles.AllowCurrencySymbol | NumberStyles.AllowExponent, CultureInfo.CurrentCulture, out valueParsed))
{ ... }

... или путем разрешения любого поддерживаемого форматирования:

int valueParsed;
if(Int32.TryParse(txtMyText.Text.Trim(), NumberStyles.Any, CultureInfo.CurrentCulture, out valueParsed))
{ ... }