有没有比在Double.TryParse中测试C#中的整数更好的方法?

Sar*_*pps 1 methods c#-3.0

Double.TryParse返回一个值,我不需要值.我需要能够判断字符串是否为数字并且只返回一个bool.

有没有办法做到这一点?

Jon*_*eet 12

我会考虑你需要确定的确切内容."数字"比起初听起来更模糊.考虑以下字符串,以及是否要将它们视为数字:

  • "南"
  • "南"
  • "无穷"
  • "0.000000000000000000000000000000000000000000000000001"
  • "1E5"
  • "1e500"
  • "1000"
  • "+1"

使用Double.TryParse(具有en-GB文化 - 不要忘记文化问题!)会给你真,假,真,真(尽管它不可​​表示),真,假.真,真.

如果你想告诉以后的呼叫是否Double.TryParse会成功,在这里调用它将是最准确的解决方案.如果您使用其他一些标准,正则表达式可能更合适.您可能使用的标准示例:

  • 可以是+或 - ,但仅限于第一个字符
  • 任何角色都可以有一个句号.你可能想在最后避免一个 - 应该"1".有效吗?
  • 除此之外,所有字符必须是数字

除了上面的第四个也是最后一个例子之外,这将不允许.

编辑:我现在已经注意到问题的标题包括"整数".这大大减少了规范检查:

  • 你想允许前导零(例如-00012)吗?
  • 范围是多少?
  • 你只需要小数(而不是十六进制等)吗?
  • 你需要接受数千个分隔符吗?
  • 您对领先/尾随空白的政策是什么?


ang*_*son 8

好吧,你可以使用正则表达式,但为什么不放弃Double.TryParse中的值并继续前进?我认为尝试复制此代码的努力不值得.


Mit*_*eat 5

一种方法是添加引用Microsoft.VisualBasic然后使用Information.IsNumeric().

using Microsoft.VisualBasic;

...

if (Information.IsNumeric("1233434.0"))
{
    Console.WriteLine("Yes");
}
Run Code Online (Sandbox Code Playgroud)