c#中的IsNumeric函数

时间:2014-04-01 18:48:36

标签: c# function parsing try-catch numeric

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

我知道有一种方法可以通过添加对Visual Basic的引用来启用Visual C#中的Visual Basic IsNumeric函数,但我不知道它的语法。我需要的是在C#中启用IsNumeric函数的简明扼要的演练。我不打算使用Visual Basic本地的任何其他功能。

9 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:15)

要完全从Bill回答,你可以制作一个扩展方法并使用一些语法糖来帮助你。

创建一个类文件StringExtensions.cs

内容:

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

编辑:这是针对更新的C#7语法。在线声明参数。

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

这样的调用方法:

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

答案 2 :(得分:14)

你可以制作一个帮助方法。类似的东西:

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

答案 3 :(得分:4)

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

菜单: 项目 - &gt;添加参考

点击:assembly,framework

勾选Microsoft.VisualBasic。

点击确定。

该链接适用于Visual Studio 2013,您可以使用“其他版本”下拉列表来显示不同版本的Visual Studio。

在所有情况下,您都需要添加对.NET程序集“Microsoft.VisualBasic”的引用。

在c#文件的顶部,你需要:

using Microsoft.VisualBasic;

然后你可以看看编写代码。

代码如下:

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

答案 4 :(得分:3)

使用C#7(.NET Framework 4.6.2),您可以将IsNumeric函数编写为一行:

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

请注意,上述函数仅适用于整数(Int32)。但是您可以为其他数值数据类型实现相应的函数,如long,double等。

答案 5 :(得分:2)

尝试以下代码段。

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

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

答案 6 :(得分:1)

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

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&amp; ^ * ^不是数字。

Note, here are a few other ways to check for numbers using RegEx.

答案 7 :(得分:1)

值得一提的是,可以对照Unicode类别(数字,大写,小写,货币等)检查字符串中的字符。这是两个使用Linq检查字符串中数字的示例:

-- INSERT INTO distribution(loan_id,t_in,t_out,amount)
-- we compute the distributions for the current IN transaction and store them in table DISTRIBUTIONS 
-- to be used by the next IN transaction
SELECT current.loan_id,6 AS t_in,current.t_id AS t_out,25 * (current.amt - paid) / (total_due - total_paid) AS distributed
FROM 
-- first we get the amount paid for each existing OUT transaction
(SELECT t.loan_id,t.t_id,t.amt,SUM(d.amount) AS paid
FROM transactions AS t
LEFT JOIN distribution AS d ON t.loan_id = d.loan_id AND t.t_id = d.t_out
WHERE t_type = 'OUT' AND t.t_id < 6 -- only OUT transactions before the current IN transaction
GROUP BY t.loan_id,t.t_id,t.amt) AS current
LEFT JOIN
-- next we get the total amount due for the given loan
(SELECT loan_id,SUM(amt) AS total_due
FROM transactions
WHERE t_type = 'OUT' AND t_id < 6 -- only OUT transactions before the current IN transaction
GROUP BY loan_id) AS t_due                                                                   
ON current.loan_id = t_due.loan_id
LEFT JOIN
-- next we get the total amount paid for the given loan
(SELECT loan_id,COALESCE(SUM(amount),0) AS total_paid
FROM distribution AS d
WHERE t_out < 6 -- only OUT transactions before the current IN transaction
GROUP BY loan_id) AS t_paid
ON current.loan_id = t_paid.loan_id
WHERE current.loan_id = 1 -- the loan ID of the current IN transaction

为清楚起见,以上语法是以下版本的简化版本:

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

链接到MSDN上的unicode类别:

UnicodeCategory Enumeration

答案 8 :(得分:-1)

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

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;
}