如果我有这些字符串:

"abc" =假 "123" =真 "ab2" = false

是否有一个命令,如IsNumeric()或其他命令,可以识别字符串是否是有效的数字?


当前回答

int n;
bool isNumeric = int.TryParse("123", out n);

从c# 7开始更新:

var isNumeric = int.TryParse("123", out int n);

或者,如果不需要这个数字,可以丢弃out参数

var isNumeric = int.TryParse("123", out _);

变量可以被它们各自的类型替换!

其他回答

 bool is_number(string str, char delimiter = '.')
    {
        if(str.Length==0) //Empty
        {
            return false;
        }
        bool is_delimetered = false;
        foreach (char c in str)
        {
            if ((c < '0' || c > '9') && (c != delimiter)) //ASCII table check. Not a digit && not delimeter
            {
                return false;
            }
            if (c == delimiter)
            {
                if (is_delimetered) //more than 1 delimiter
                {
                    return false;
                }
                else //first time delimiter
                {
                    is_delimetered = true;
                }
            }
        }
        return true; 
    }

如果你想检查一个字符串是否是一个数字(我假设它是一个字符串,因为如果它是一个数字,你知道它是1)。

没有正则表达式和 尽可能多地使用微软的代码

你还可以:

public static bool IsNumber(this string aNumber)
{
     BigInteger temp_big_int;
     var is_number = BigInteger.TryParse(aNumber, out temp_big_int);
     return is_number;
}

这将解决通常的麻烦:

开头是负(-)或正(+ BigIntegers不会解析带小数点的数字。(因此:BigInteger.Parse("3.3")将抛出异常,而TryParse将返回false) 没有搞笑的非数字 适用于数字大于Double通常用法的情况。TryParse

您必须向System添加一个引用。数字和有 使用System.Numerics;名列全班第一(好吧,我猜第二名是额外奖励:)

如果你想知道一个字符串是否是一个数字,你可以尝试解析它:

var numberString = "123";
int number;

int.TryParse(numberString , out number);

注意,TryParse返回一个bool值,您可以使用它来检查解析是否成功。

Kunal Noel回答的更新

stringTest.All(char.IsDigit);
// This returns true if all characters of the string are digits.

但是,在这种情况下,我们有空字符串将通过测试,所以,你可以:

if (!string.IsNullOrEmpty(stringTest) && stringTest.All(char.IsDigit)){
   // Do your logic here
}

您可以使用TryParse来确定该字符串是否可以解析为整数。

int i;
bool bNum = int.TryParse(str, out i);

布尔值会告诉你它是否有效。