c#中的IsNumeric函数

IsNumeric function in c#

我知道可以使用try/catch语句检查文本框或变量的值是否为数字,但IsNumeric简单得多。我当前的一个项目要求从文本框中恢复值。不幸的是,它是用C写的。

我知道有一种方法可以通过添加对Visual Basic的引用来启用Visual C中的Visual Basic IsNumeric函数,尽管我不知道它的语法。我需要的是一个清晰简洁的演练,用于在C中启用IsNumeric功能。我不打算使用任何其他VisualBasic固有的功能。


1
2
3
4
public bool IsNumeric(string value)
{
    return value.All(char.IsNumber);
}


要完全窃取比尔的答案,你可以做一个扩展方法,并使用一些句法糖来帮助你。

创建一个类文件,stringextensions.cs

内容:

1
2
3
4
5
6
7
8
public static class StringExt
{
    public static bool IsNumeric(this string text)
    {
        double test;
        return double.TryParse(text, out test);
    }
}

编辑:这是为了更新C 7语法。在线声明参数。

1
2
3
4
5
6
7
public static class StringExt
{
    public static bool IsNumeric(this string text)
    {
        return double.TryParse(text, out double test);
    }
}

像这样的调用方法:

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


您可以创建一个助手方法。类似:

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


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

菜单:项目——>添加引用

单击:程序集,框架

在Microsoft.VisualBasic上打勾。

打好了。

该链接用于Visual Studio 2013,您可以对不同版本的Visual Studio使用"其他版本"下拉列表。

在所有情况下,都需要添加对.NET程序集"microsoft.VisualBasic"的引用。

在您的C文件顶部,您需要:

1
using Microsoft.VisualBasic;

然后您可以看到编写代码。

代码如下:

1
2
3
4
5
6
7
   private void btnOK_Click(object sender, EventArgs e)
   {
      if ( Information.IsNumeric(startingbudget) )
      {
         MessageBox.Show("This is a number.");
      }
   }


使用C_7(.NET Framework 4.6.2),可以将isNumeric函数编写为一行程序:

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

注意,上面的函数只适用于整数(int32)。但您可以为其他数字数据类型实现相应的函数,如long、double等。


尝试遵循代码段。

1
2
3
4
5
6
7
8
double myVal = 0;
String myVar ="Not Numeric Type";

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


值得一提的是,可以根据Unicode类别(数字、大写、小写、货币等)检查字符串中的字符。下面是两个使用LINQ检查字符串中数字的示例:

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

为了清楚起见,上面的语法是以下内容的较短版本:

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

链接到msdn上的unicode类别:

unicodecategory枚举


我通常用扩展方法处理类似的事情。以下是在控制台应用程序中实现的一种方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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不是数字。

&;^*^不是数字。

注意,这里有一些使用regex检查数字的其他方法。


数字可以通过多种方式实现,但我用我的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}