我只需知道值是否为数字。我不需要对价值做任何事情。这是最好的方法吗?感觉很脏,创建一个我将永远不会使用的变量:
int val;
if(int.TryParse(txtFoo.Text, out val))
{
....
}
答案 0 :(得分:3)
是的,使用相关的TryParse
方法并忽略out
参数是执行此操作的最佳方式。
您可能希望将其包装到您自己的一组辅助方法中(如果默认值不合适,可以指定相应的文化等),只返回bool
而不是{{1} }}参数使它们更容易调用。
当然,您需要确定哪种解析最合适 - 即使对于整数,您还需要考虑out
的范围是否足以满足您的用例。根据我的经验,大多数数字输入都有自己的“自然”有效值范围,这不太可能完全是任何预定义类型的范围。因此,您可能希望扩展辅助方法以包括要接受的有效值范围。
答案 1 :(得分:2)
它不如int.TryParse
灵活,但您可以查看每个字符是否为数字:
bool isInt = txtFoo.Text.All(c => char.IsNumber(c));
但总的来说,我建议坚持使用int.TryParse
。您甚至可以调用未使用的参数“忽略”来明确您的意图,例如:
int ignored;
bool isInt = int.TryParse(txtFoo.Text, out ignored);
答案 2 :(得分:1)
这是我所知道的最好的方式 - 这是我们公司标准所坚持的,因为在解析过程中完成了错误处理。
答案 3 :(得分:1)
这是在C#中使用它的推荐方法。但是,您也可以添加Microsoft.VisualBasic.dll
作为项目的参考,然后使用Microsoft.VisualBasic.Information.IsNumeric()
答案 4 :(得分:1)
您可以使用正则表达式
Regex _isNumber = new Regex(@"^\d+$");
_isNumber.IsMatch(txtFoo.Text);
这只会匹配Ints,但您可以编写一个也匹配小数。
答案 5 :(得分:1)
“是数字”是一个含糊不清的术语。
因此,没有“最佳”方式,框架提供了多种不同的方法来解析数字。
答案 6 :(得分:0)
您可以尝试使用Regex解析来确定字符串中没有非数字字符,或者您可以根据输入使用Int.TryParse(),Double.TryParse(),Float.TryParse()。 / p>
答案 7 :(得分:0)
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还是一个浮点数。