什么是C#相当于NaN或IsNumeric?

testinginputstring的最有效方法是否包含数字值(或反过来不是数字)? 我想我可以使用Double.Parse或正则expression式(见下文),但我想知道是否有一些内置的方式来做到这一点,如JavaScript的NaN()IsNumeric() (是VB,我不记得?)。

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

这没有正则expression式的开销

 double myNum = 0; String testVar = "Not A Number"; if (Double.TryParse(testVar, out myNum)) { // it is a number } else { // it is not a number } 

顺便提一句,所有的标准数据types,除了GUID外,都支持TryParse。

更新
暗示“2345”的值将通过上述testing作为一个数字。 但是,如果您需要确保string中的所有字符都是数字,则应该采取另一种方法。

例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); } 

我更喜欢这样的东西,它可以让你决定什么NumberStyle来testing。

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

除了前面的正确答案之外,可能值得指出的是,“不是数字”(NaN)在其一般用法中并不等同于不能被评估为数字值的string。 NaN通常被理解为用于表示“不可能”计算结果的数值 – 结果未定义。 在这方面,我会说Javascript的使用有点误导。 在C#中,NaN被定义为单数和双数数据types的一个属性,用来明确地指出潜水零的结果。 其他语言使用它来表示不同的“不可能的”值。

我喜欢扩展方法,但不喜欢如果可能的话抛出exception。 我select了一个扩展方法,在这里采取两个最好的答案。

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

您仍然可以在C#中使用Visual Basic函数。 你唯一要做的就是按照下面的说明操作:

  1. 通过右键单击您的项目并select“添加引用”添加对Visual Basic库的引用:

在这里输入图像描述

  1. 然后导入到您的课堂,如下所示:

    使用Microsoft.VisualBasic;

  2. 接下来使用它,无论你想要如下所示:

      if (!Information.IsNumeric(softwareVersion)) { throw new DataException(string.Format("[{0}] is an invalid App Version! Only numeric values are supported at this time.", softwareVersion)); } 

希望这有助于祝你好运!

我知道这已经以许多不同的方式得到了回答,扩展和lambda示例,但最简单的解决scheme的组合。

 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在一条线上。 当然这是有限的,因为它只testing数字字符。

要使用,只需要一个string,并调用它的方法,如:

 bool IsaNumber = "123456".IsNumeric(); 

VB具有IsNumericfunction。 你可以参考Microsoft.VisualBasic.dll并使用它。

简单的扩展:

 public static bool IsNumeric(this String str) { try { Double.Parse(str.ToString()); return true; } catch { } return false; } 
 public static bool IsNumeric(string anyString) { if (anyString == null) { anyString = ""; } if (anyString.Length > 0) { double dummyOut = new double(); System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US", true); return Double.TryParse(anyString, System.Globalization.NumberStyles.Any, cultureInfo.NumberFormat, out dummyOut); } else { return false; } } 

也许这是一个C#3function,但你可以使用double.NaN

是的,IsNumeric是VB。 通常人们使用TryParse()方法,虽然它有点笨重。 正如你所build议的,你可以随时编写自己的。

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

实际上,所有的.NET 2.0以上版本都支持Double.NaN

我使用Chris Lively的片段(select的答案)封装在一个布尔function,如Gishu的build议一两年。 我用它来确保某些查询string在进行进一步处理之前只是数字。 我开始得到一些错误的querystrings,明显的答案没有处理,具体来说,每当一个数字如“3645”,(返回true)后通过逗号。 这是由此产生的mod:

  static public bool IsNumeric(string s) { double myNum = 0; if (Double.TryParse(s, out myNum)) { if (s.Contains(",")) return false; return true; } else { return false; } }