如何检查IsNumeric

use*_*606 46 c#

可能重复:
如何识别字符串是否包含数字?

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

为了解决它,我只是写了代码:

    if (Int32.Parse(txtMyText.Text.Trim()) > 0)
Run Code Online (Sandbox Code Playgroud)

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

Otá*_*cio 82

你可以写一个扩展方法:

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

  • 我宁愿调用那个方法`IsInteger`.数字很​​模糊. (8认同)
  • @phoog - 我并没有尝试复制任何东西,只是提供了一个比调用Int32.Parse更好的选择.如果您有兴趣,请随时与我们分享. (5认同)
  • @CodeInChaos - 确定,为什么不呢.我也不会把类扩展称为扩展,我更关心这个想法. (3认同)

MiM*_*iMo 17

您应该使用TryParse- Parse如果字符串不是有效数字则抛出异常 - 例如,如果您要测试有效整数:

int v;
if (Int32.TryParse(textMyText.Text.Trim(), out v)) {
  . . .
}
Run Code Online (Sandbox Code Playgroud)

如果要测试有效的浮点数:

double v;
if (Double.TryParse(textMyText.Text.Trim(), out v)) {
  . . .
}
Run Code Online (Sandbox Code Playgroud)

另请注意,Double.TryParse有一个带有额外参数的重载版本,指定控制解析过程的各种规则和选项 - 例如本地化('.'或',') - 请参阅http://msdn.microsoft.com/en-us/library/3s27fasw .aspx.


Rei*_*ldo 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

  • 我喜欢首先检查数据类型的方法,但我建议使用`Double tmp修改代码的第二部分; var isSuccess = Double.TryParse(表达式为字符串,输出tmp); return isSuccess;`而不是周围的try-catch块. (3认同)

Cor*_*rey 8

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


pho*_*oog 6

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

IsNumeric比...更灵活TryParse.例如,IsNumeric返回true字符串"$100",而TryParse方法都返回false.

IsNumeric在C#中使用,请添加对Microsoft.VisualBasic.dll的引用.该函数是类的静态方法Microsoft.VisualBasic.Information,所以假设你有using Microsoft.VisualBasic;,你可以这样做:

if (Information.IsNumeric(txtMyText.Text.Trim())) //...
Run Code Online (Sandbox Code Playgroud)

  • 我不确定我是否希望结果"真实"为"$ 100"`数字?! (7认同)
  • @cederlof我不确定你会不会,除非你试图复制Visual Basic的'IsNumeric`函数,这在函数中提到.该函数对于"$ 100"返回true.例如,如果您尝试重现Excel VBA过程的行为,那么您希望函数为"$ 100"返回true,并且您可能最好使用Microsoft.VisualBasic.dll而不是尝试编写自己的替换功能. (4认同)