什么是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函数。 你唯一要做的就是按照下面的说明操作:
- 通过右键单击您的项目并select“添加引用”添加对Visual Basic库的引用:
-
然后将其导入到您的课堂,如下所示:
使用Microsoft.VisualBasic;
-
接下来使用它,无论你想要如下所示:
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具有IsNumeric
function。 你可以参考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; } }