如果我有这些字符串:

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

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


当前回答

最好的灵活解决方案是.net内置函数- char.IsDigit。它适用于无限长的数字。只有当每个字符都是数字时,它才会返回true。我使用它很多次,没有任何问题,而且我找到了更简单的解决方案。我做了一个示例方法。它可以使用了。此外,我还增加了对空输入的验证。所以这个方法现在是完全无懈可击的

public static bool IsNumeric(string strNumber)
    {
        if (string.IsNullOrEmpty(strNumber))
        {
            return false;
        }
        else
        {
            int numberOfChar = strNumber.Count();
            if (numberOfChar > 0)
            {
                bool r = strNumber.All(char.IsDigit);
                return r;
            }
            else
            {
                return false;
            }
        }
    }

其他回答

所有的答案都很有用。但是在寻找数值为12位数或更多的解决方案时(在我的情况下),然后在调试时,我发现以下解决方案很有用:

double tempInt = 0;
bool result = double.TryParse("Your_12_Digit_Or_more_StringValue", out tempInt);

结果变量会给你true或false。

对于许多数据类型,您总是可以使用内置的TryParse方法来查看所讨论的字符串是否会通过。

的例子。

decimal myDec;
var Result = decimal.TryParse("123", out myDec);

结果将= True

decimal myDec;
var Result = decimal.TryParse("abc", out myDec);

结果将= False

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

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

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

最好的灵活解决方案是.net内置函数- char.IsDigit。它适用于无限长的数字。只有当每个字符都是数字时,它才会返回true。我使用它很多次,没有任何问题,而且我找到了更简单的解决方案。我做了一个示例方法。它可以使用了。此外,我还增加了对空输入的验证。所以这个方法现在是完全无懈可击的

public static bool IsNumeric(string strNumber)
    {
        if (string.IsNullOrEmpty(strNumber))
        {
            return false;
        }
        else
        {
            int numberOfChar = strNumber.Count();
            if (numberOfChar > 0)
            {
                bool r = strNumber.All(char.IsDigit);
                return r;
            }
            else
            {
                return false;
            }
        }
    }

这可能是c#中最好的选择。

如果你想知道字符串是否包含一个整数(整数):

string someString;
// ...
int myInt;
bool isNumerical = int.TryParse(someString, out myInt);

TryParse方法将尝试将字符串转换为一个数字(整数),如果成功,它将返回true并将相应的数字放在myInt中。如果不能,则返回false。

使用其他响应中显示的int.Parse(someString)替代方法的解决方案是可行的,但它要慢得多,因为抛出异常的代价非常高。TryParse(…)在版本2中被添加到c#语言中,在此之前您没有选择。现在您做到了:因此应该避免使用Parse()替代方法。

如果你想接受十进制数,decimal类还有一个. tryparse(…)方法。在上面的讨论中,将int替换为decimal,同样的原则也适用。