TryParse方法返回不同的结果

时间:2017-03-15 09:19:47

标签: c#

我正在尝试使用“TryParse”方法检查字符串是否有数字。对于字符串“101”中的数字,它返回“True”,对于字符串“20170119000004”中的数字,它返回“False”。

我的代码:

int n;
string maf_seq_no="";
maf_seq_no = "101";
Console.WriteLine(int.TryParse(maf_seq_no, out n)); //OUTPUT True
maf_seq_no = "20170119000004";
Console.WriteLine(int.TryParse(maf_seq_no, out n)); //OUTPUT False

知道为什么不同的数字输出?

4 个答案:

答案 0 :(得分:2)

20170119000004不是有效的int值。最大的int值是2147483647。这就是它返回错误的原因。

如果要检查字符串是否完全由数字组成,可以使用:

var isOnlyNumbers = RegEx.IsMatch(maf_seq_no, "^[0-9]+$");

答案 1 :(得分:2)

如果您只想查看string是否仅由数字组成,您可以执行以下操作:

string str = "12345";
bool isAllDigits = str.All(char.IsDigit);

int最高可以是2147483647(但它甚至可以是负数!),long 9223372036854775807(但它甚至可以是负数!)。有无符号版本可以包含更大的数字,但仍然是最大位数是“固定”!

答案 2 :(得分:1)

int.TryParse会为false返回"20170119000004",因为此值高于int.MaxValue

例如,您可以尝试long.TryParse

答案 3 :(得分:1)

它返回Int,因为false对于20170119000004(int32)来说太大了。 int maximum valueint,或2 31 - 1。

改为使用long,其最大值为2147483647或  2 63 - 1。