C# TryParse方法返回不同的结果

C# TryParse方法返回不同的结果,c#,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

我试图检查字符串是否有数字,是否使用“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

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

int.TryParse
返回
false
用于
“20170119000004”
,因为该值高于
int.MaxValue


例如,您可以尝试
long.TryParse

int.TryParse
“20170119000004”
返回
false
,因为该值高于
int.MaxValue


您可以尝试使用
long。例如,TryParse

20170119000004
不是有效的int值。最大可能的int值是
2147483647
。这就是它返回false的原因

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

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

20170119000004
不是有效的int值。最大可能的int值是
2147483647
。这就是它返回false的原因

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

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

它返回
false
,因为
20170119000004
对于
int
(int32)来说太大。一个
int
2147483647
,或231-1

改用a,其最大值为
9223372036854775807

263-1.

它返回
false
,因为
20170119000004
对于
int
(int32)来说太大了。一个
int
2147483647
,或231-1

改用a,其最大值为
9223372036854775807

263-1.

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

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

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

如果只想检查
字符串
是否仅由数字组成,可以执行以下操作:

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

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

n不能保存该值,因为它是int.buffer溢出?在第二个测试用例中,尝试输出
long
,而不是
int
。如果字符串可能包含任意数量的数字,那么检查它是不正确的(即使使用long而不是int)。作为推论,并非所有的数字序列都是有效的
int
,或者有效的
long
:-),所以变量“n”必须是“long”对的。否。它将从
int.TryParse
返回相同的结果
maf_seq_no
必须等于或小于int
MaxValue
n不能保存该值,因为它是int.buffer溢出?在第二个测试用例中,尝试输出
long
,而不是
int
。如果字符串可能包含任意数量的数字,那么检查它是不正确的(即使使用long而不是int)。作为推论,并非所有的数字序列都是有效的
int
,或者有效的
long
:-),所以变量“n”必须是“long”对的。否。它将从
int.TryParse
返回相同的结果
maf_seq_no
必须等于或小于int
MaxValue
高于
int.MaxValue
高于
int.MaxValue
谢谢你的回答,这会返回正确的输出谢谢你的回答,这会返回正确的输出