如何检查IsNumeric

时间:2012-03-21 17:00:57

标签: c#

  

可能重复:
  How to identify if string contain a number?

在VB中有一个IsNumeric函数,c#中有类似的东西吗?

为了解决这个问题,我刚刚编写了代码:

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

我只是想知道是否有更好的方法来做到这一点。

7 个答案:

答案 0 :(得分:80)

你可以写一个扩展方法:

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

答案 1 :(得分:16)

如果字符串不是有效数字,您应该使用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

答案 2 :(得分:15)

我认为你需要一些更通用的东西。试试这个:

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 :(得分:8)

TryParse方法,它返回一个bool,指示转换是否成功。

答案 4 :(得分:6)

其他答案建议使用TryParse,这可能符合您的需求,但提供IsNumeric功能的最安全方法是引用VB库并使用IsNumeric功能

IsNumericTryParse更灵活。例如,IsNumeric为字符串true返回"$100",而TryParse方法返回false

要在C#中使用IsNumeric,请添加对Microsoft.VisualBasic.dll的引用。该函数是Microsoft.VisualBasic.Information类的静态方法,假设您有using Microsoft.VisualBasic;,则可以执行此操作:

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

答案 5 :(得分:1)

您应该使用TryParse方法将数字的字符串表示形式转换为其等效的32位有符号整数。返回值表示转换是否成功。

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

答案 6 :(得分:1)

有一个更好的方法:

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

如果您尝试解析文本并且无法解析,则Int32.Parse方法将引发异常。我认为最好使用TryParse方法来捕获异常,如果遇到异常则让你知道它是一个布尔值。

解析Int32.Parse考虑的文本有很多复杂因素。重复这项工作是愚蠢的。因此,这很可能是VB的IsNumeric采用的方法。您还可以通过NumberStyles枚举自定义解析规则,以允许十六进制,十进制,货币和其他一些样式。

非基于Web的应用程序的另一种常见方法是将文本框的输入限制为仅接受可解析为整数的字符。

编辑:您可以通过指定特定的NumberStyles接受更多种输入格式,例如货币值(“$ 100”)和指数(“1E4”):

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))
{ ... }