Answers:
这没有正则表达式开销
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);
}
更新2(从@stackonfire处理空字符串或空字符串)
public Boolean IsNumber(String s) {
Boolean value = true;
if (s == String.Empty || s == null) {
value=false;
} else {
foreach(Char c in s.ToCharArray()) {
value = value && Char.IsDigit(c);
}
} return value;
}
Number
在Javascript对象是浮动或整数,所以改为double.TryParse将是一个更完全等效
double
,但是许多人会认为它们不是数字。
public Boolean IsNumber(String s) { Boolean value = true; if (s == String.Empty || s == null) { value=false; } else { foreach(Char c in s.ToCharArray()) { value = value && Char.IsDigit(c); } } return value; }
我喜欢这样的东西,它可以让您决定NumberStyle
要测试的内容。
public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
Double temp;
Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
return result;
}
除了先前的正确答案外,可能值得指出的是,“ Not a Number”(NaN)的一般用法并不等同于不能评估为数值的字符串。NaN通常被理解为用于表示“不可能”计算结果的数值-其中结果未定义。在这方面,我想说Javascript的用法有点误导。在C#中,NaN定义为单数值和双数值类型的属性,用于显式引用零乘以零的结果。其他语言使用它来表示不同的“不可能”值。
我知道可以通过扩展和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();
我喜欢扩展方法,但如果可能的话,不喜欢抛出异常。我选择了一种扩展方法,在这里采用了两个最佳答案。
/// <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函数。 您唯一要做的就是按照下面显示的说明进行操作:
然后将其导入您的班级,如下所示:
使用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));
}
希望这会有所帮助,祝你好运!
VB具有该IsNumeric
功能。您可以参考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;
}
}
我正在使用Chris Lively的代码片段(选定的答案)封装在bool函数(如Gishu的建议)中一两年。我用它来确保某些查询字符串只是数字,然后再进行进一步处理。我开始收到一些错误的查询字符串,标记的答案没有处理,特别是每当在“ 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;
}
}
Double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out myNum)
这是Siir先生提出的解决方案的修改版本。我发现添加扩展方法是调用方法中重用和简化的最佳解决方案。
public static bool IsNumeric(this String s)
{
try { double.Parse(s); return true; }
catch (Exception) { return false; }
}
我修改了方法主体以适合2行,并删除了不必要的.ToString()实现。对于不熟悉扩展方法的用户,这里是如何实现:
创建一个名为ExtensionMethods的类文件。粘贴此代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace YourNameSpaceHere
{
public static class ExtensionMethods
{
public static bool IsNumeric(this String s)
{
try { double.Parse(s); return true; }
catch (Exception) { return false; }
}
}
}
用您的实际名称空间替换YourNameSpaceHere。保存更改。现在,您可以在应用程序中的任何位置使用扩展方法:
bool validInput = stringVariable.IsNumeric();
注意:对于整数和小数,此方法将返回true,但如果字符串包含逗号,则将返回false。如果您想接受带有逗号或诸如“ $”之类的符号的输入,我建议您先实施一种删除这些字符的方法,然后测试IsNumeric。