我只需要知道这个值是否为数字,不需要对这个值进行任何操作。这是最好的方法吗?创建一个我永远不会使用的变量让我感觉很不舒服。
int val;
if(int.TryParse(txtFoo.Text, out val))
{
....
}
System.Numerics.BigInteger.TryParse()
。 - Chris WenhamInt64
! - LukeHBigInteger
“可以到11”。 - Chris Wenham它不像int.TryParse
那样灵活,但您可以检查每个字符是否为数字:
bool isInt = txtFoo.Text.All(c => char.IsNumber(c));
总的来说,我建议使用 int.TryParse
。你甚至可以将未使用的参数命名为 "ignored",以明确你的意图,例如:
int ignored;
bool isInt = int.TryParse(txtFoo.Text, out ignored);
'+'
、'-'
、,
、.
、'E'
和 'e'
的处理,也许还有其他我忽略的字符,因为这些是可能出现在数字字符串中的非数字字符。 - phoogRegex _isNumber = new Regex(@"^\d+$");
_isNumber.IsMatch(txtFoo.Text);
这只匹配整数,但是你可以编写一个同时匹配小数的方法。
这是使用C#的推荐方式。然而,你也可以将Microsoft.VisualBasic.dll
添加为项目的引用,然后使用Microsoft.VisualBasic.Information.IsNumeric()
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会被标记为一个数字,需要一些更神奇的操作来进行清洗检查,但是你也许能够确定它是整数还是浮点数。
在我看来,这是最好的方法 - 这也是我们公司标准所遵循的,因为错误处理是在解析过程中完成的。
以下是其优点详细说明:https://web.archive.org/web/20150510214425/http://www.dotnetperls.com:80/int-tryparse
TryParse
已经不存在了。 - IAbstract
123.45
是数值型的,但是它会失败这个检查。您只测试整数吗? - Winston Smith