当前位置:  开发笔记 > 编程语言 > 正文

什么是NaN或IsNumeric的C#等价物?

如何解决《什么是NaN或IsNumeric的C#等价物?》经验,为你挑选了6个好方法。

测试输入字符串的最有效方法是,它是否包含数值(或相反的非数字)?我想我可以使用Double.Parse或正则表达式(见下文),但我想知道是否有一些内置的方法来做到这一点,如javascript NaN()IsNumeric()(是VB,我不记得?).

public static bool IsNumeric(this string value)
{
    return Regex.IsMatch(value, "^\\d+$");
}

NotMe.. 170

这没有正则表达式开销

double myNum = 0;
String testVar = "Not A Number";

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

顺便提一下,除了GUID之外,所有标准数据类型都支持TryParse.

更新
secretwep提出值"2345"将上面的测试作为数字传递.但是,如果您需要确保字符串中的所有字符都是数字,则应采用另一种方法.

例1:

public Boolean IsNumber(String s) {
  Boolean value = true;
  foreach(Char c in s.ToCharArray()) {
    value = value && Char.IsDigit(c);
  }

  return value;
}

或者如果你想变得更加花哨

public Boolean IsNumber(String value) {
  return value.All(Char.IsDigit);
}

你可能要小心这一点,因为字符串"NaN"和"Infinity"解析为`double`,但很多人会认为它们不是数字. (7认同)

唯一的问题是Javascript中的`Number`对象是一个浮点数或整数,因此更改为double.TryParse将是一个更精确的等价物 (2认同)


Anthony Mast.. 41

我更喜欢这样的东西,它让你决定NumberStyle要测试什么.

public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
    Double temp;
    Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
    return result;
}

+1是目前为止Double.TryParse而不是Int.TryParse的唯一的人:) (7认同)


Stu Mackella.. 19

除了之前的正确答案之外,可能值得指出的是,一般用法中的"非数字"(NaN)等同于无法作为数值计算的字符串.NaN通常被理解为用于表示"不可能"计算结果的数值 - 其中结果是未定义的.在这方面,我会说Javascript的使用有点误导.在C#中,NaN被定义为单数字和双数字类型的属性,用于明确地引用零归零的结果.其他语言用它来表示不同的"不可能"值.



1> NotMe..:

这没有正则表达式开销

double myNum = 0;
String testVar = "Not A Number";

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

顺便提一下,除了GUID之外,所有标准数据类型都支持TryParse.

更新
secretwep提出值"2345"将上面的测试作为数字传递.但是,如果您需要确保字符串中的所有字符都是数字,则应采用另一种方法.

例1:

public Boolean IsNumber(String s) {
  Boolean value = true;
  foreach(Char c in s.ToCharArray()) {
    value = value && Char.IsDigit(c);
  }

  return value;
}

或者如果你想变得更加花哨

public Boolean IsNumber(String value) {
  return value.All(Char.IsDigit);
}


你可能要小心这一点,因为字符串"NaN"和"Infinity"解析为`double`,但很多人会认为它们不是数字.
唯一的问题是Javascript中的`Number`对象是一个浮点数或整数,因此更改为double.TryParse将是一个更精确的等价物

2> Anthony Mast..:

我更喜欢这样的东西,它让你决定NumberStyle要测试什么.

public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
    Double temp;
    Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
    return result;
}


+1是目前为止Double.TryParse而不是Int.TryParse的唯一的人:)

3> Stu Mackella..:

除了之前的正确答案之外,可能值得指出的是,一般用法中的"非数字"(NaN)等同于无法作为数值计算的字符串.NaN通常被理解为用于表示"不可能"计算结果的数值 - 其中结果是未定义的.在这方面,我会说Javascript的使用有点误导.在C#中,NaN被定义为单数字和双数字类型的属性,用于明确地引用零归零的结果.其他语言用它来表示不同的"不可能"值.



4> Paul Bartlet..:

我知道这已经通过许多不同的方式得到了回答,包括扩展和lambda示例,但两者的结合是最简单的解决方案.

public static bool IsNumeric(this String s)
{
    return s.All(Char.IsDigit);
}

或者如果您使用的是Visual Studio 2015(C#6.0或更高版本)

public static bool IsNumeric(this String s) => s.All(Char.IsDigit);

令人敬畏的C#6在一条线上.当然这是有限的,因为它只测试数字字符.

要使用,只需要一个字符串并在其上调用方法,例如:

bool IsaNumber = "123456".IsNumeric();



5> Ed S...:

是的,IsNumeric是VB.通常人们使用TryParse()方法,虽然它有点笨重.正如你的建议,你总是可以自己写.

int i;
if (int.TryParse(string, out i))
{

}



6> NER1808..:

我喜欢扩展方法,但如果可能的话,不喜欢抛出异常.我在这里选择了最好的2个答案的扩展方法.

    /// 
    /// Extension method that works out if a string is numeric or not
    /// 
    /// string that may be a number
    /// true if numeric, false if not
    public static bool IsNumeric(this String str)
    {
        double myNum = 0;
        if (Double.TryParse(str, out myNum))
        {
            return true;
        }
        return false;
    }

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有