最简单的检查数字方法

5

我有一个字符串数组,最简单的方法是什么来检查数组中的所有元素是否都是数字?

string[] str = new string[] { "23", "25", "Ho" };

8
请定义数字:它是 int32(32 位整数)、小数(decimal)还是浮点数(float-point)? - Rubens Farias
6个回答

6
你可以这样做:
var isOnlyNumbers = str.All(s =>
    {
        double i;
        return double.TryParse(s, out i);
    });

6

如果你添加对Microsoft.VisualBasic程序集的引用,你可以使用以下一行代码:

bool isEverythingNumeric = 
    str.All(s => Microsoft.VisualBasic.Information.IsNumeric(s));

聪明的 +1 ... 创新思维 - Daniel Elliott
1
为什么要使用看起来如此专属于VisualBasic的东西? - davidfowl
3
不错的想法,然而我不确定是否值得使用一个包含整个dll的函数。 - James
1
为什么在VisualBasic程序集中有一个如此普遍有用的东西?(也可以参见http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx) - Mark Rendle

4

试试这个:

string[] str = new string[] { "23", "25", "Ho" };
double trouble;
if (str.All(number => Double.TryParse(number, out trouble)))
{
    // do stuff
}

好主意,但只有当所有数字都适合 Int32 时才能起作用。 - Konamiman

3
使用正则表达式如何?
 using System.Text.RegularExpressions;
 ...
 bool isNum= Regex.IsMatch(strToMatch,"^\\d+(\\.\\d+)?$");

TryParse


2
利用字符串也是字符数组的事实,您可以像这样做:
str.All(s => s.All(c => Char.IsDigit(c)));

但是这对包含空格的字符串不起作用。那么科学计数法呢? - Mark Seemann
似乎我们需要先定义什么是数字 =) - Rubens Farias
2
Kona...那么-1呢?那不是一个踩的意思,只是一个问题而已 ;) - Daniel Elliott
那会在提供的示例中起作用。也许提问者可以澄清是否需要检查非数字字符? - Konamiman

1

或者不使用 Linq...

bool allNumbers = true;
foreach(string str in myArray)
{
   int nr;
   if(!Int32.TryParse(str, out nr))
   {
      allNumbers = false;
      break;
   }
}

为什么不使用linq呢?你可以继续编写自己的TryParse方法 :) - Kamarey
2
因为我们邪恶的老板强制要求我们使用C# 2.0 ;) - Carra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接