C# 中的 IsNumeric 函数

问题描述 投票:0回答:12

我知道可以使用 try/catch 语句检查文本框或变量的值是否为数字,但是

IsNumeric
so 简单得多。我当前的一个项目需要从文本框中恢复值。不幸的是,它是用 C# 编写的。

我知道有一种方法可以通过添加对 Visual Basic 的引用来在 Visual C# 中启用 Visual Basic

IsNumeric
函数,尽管我不知道它的语法。我需要的是在 C# 中启用
IsNumeric
函数的清晰简明的演练。我不打算使用 Visual Basic 固有的任何其他功能。

c# function parsing try-catch numeric
12个回答
90
投票
public bool IsNumeric(string value)
{
    return value.All(char.IsNumber);
}

50
投票

要完全从 Bill answer 中窃取,你可以做一个扩展方法并使用一些语法糖来帮助你。

创建一个类文件,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) => double.TryParse(text, out _);
}

这样的调用方法:

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

25
投票

你可以做一个辅助方法。像这样的东西:

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

8
投票

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

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

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

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

MSDN 上 unicode 类别的链接:

Unicode类别枚举


6
投票

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

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

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


5
投票

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

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

点击:程序集、框架

勾选 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.");
      }
   }

3
投票

尝试以下代码片段。

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

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

2
投票

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

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

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


0
投票

使用 Net6 进行测试并使用

object
进行通用测试,因为我的应用程序需要:

public static bool IsNumeric(this object text) => double.TryParse(Convert.ToString(text), out _);

null
string.empty
一起工作,还测试了
""


0
投票
public static bool IsNumeric(string Value)
    {
        return decimal.TryParse(Value, out _) || double.TryParse(Value, out _);
        /*
            decimal vs double:

            If a numeric value uses lot of decimal digits, it may not be convertible to 'double' type!
            If a numeric value is too big, it may not be convertible to 'decimal' type!

            Mr. "Jon Skeet" said some years ago:
            The range of a double value is much larger than the range of a decimal.
            0.1 is exactly representable in decimal but not in double, and decimal  
            actually uses a lot more bits for precision than double does.
        */
    }

0
投票

我阅读了所有建议并比较了它。 这个建议更好:

public static bool IsNumeric(string value) => double.TryParse(value, out _);

但是这个解决方案并不完美,因为它不支持浮点数:

public bool static IsNumeric(string value)=>value.All(char.IsNumber);

-2
投票

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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.