[英]Proper way to test if a value is numeric in C#
我只需要知道值是否为数字。 我不需要对价值做任何事情。 这是最好的方法吗? 感觉很脏,创建一个我将永远不会使用的变量:
int val;
if(int.TryParse(txtFoo.Text, out val))
{
....
}
是的,使用相关的TryParse
方法并忽略out
参数是执行此操作的最佳方法。
您可能希望将其包装到您自己的一组辅助方法中(如果默认值不合适,可以指定适当的文化等),只返回没有out
参数的bool
,以便更容易调用。
当然,您需要确定哪种解析最合适 - 即使对于整数,您还需要考虑Int32
的范围是否足以满足您的使用需求。 根据我的经验,大多数数字输入都有自己的“自然”有效值范围,这不太可能完全是任何预定义类型的范围。 因此,您可能希望扩展辅助方法以包括要接受的有效值范围。
它不像int.TryParse
那样灵活,但您可以检查每个字符是否是数字:
bool isInt = txtFoo.Text.All(c => char.IsNumber(c));
但总的来说,我建议坚持使用int.TryParse
。 您甚至可以调用未使用的参数“忽略”来明确您的意图,例如:
int ignored;
bool isInt = int.TryParse(txtFoo.Text, out ignored);
这是我所知道的最佳方式 - 这就是我们公司标准所遵循的原因,因为在解析过程中完成了错误处理。
这详细介绍了优点: http : //www.dotnetperls.com/int-tryparse
这是在C#中执行此操作的推荐方法。 但是,您也可以添加Microsoft.VisualBasic.dll
作为项目的引用,然后使用Microsoft.VisualBasic.Information.IsNumeric()
您可以使用正则表达式
Regex _isNumber = new Regex(@"^\d+$");
_isNumber.IsMatch(txtFoo.Text);
这只会匹配Ints,但您可以编写一个也匹配小数。
“是数字”是一个含糊不清的术语。
因此,没有“最佳”方式,框架提供了多种不同的方法来解析数字。
bool test (string teststring)
{ for (i=0;i==teststring.length;i++){
if instr("0123456789.,-+Ee",teststring.substring(i,1) <0){return false;}
// some additional tests below here if you like
return true;
}
然而,E1001E12e.12e会被注意为一个数字,需要更多的魔法来进行干净的检查,但是你可能能够确定它是一个int还是一个浮点数...
您可以尝试使用正则表达式解析来确定字符串中没有非数字字符,或者您可以根据输入使用Int.TryParse(),Double.TryParse(),Float.TryParse()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.