为什么Int32.Tryparse没有返回正确的值?

时间:2013-12-20 13:29:26

标签: c# asp.net-mvc

int resultid;
Int32.TryParse(collection["id"],out resultid);

这些值来自collection["id"],但是对于某些大于8位数的值,这些值显示为0。因此我尝试了同样的问题,将resultid作为0。请提出建议吗?

3 个答案:

答案 0 :(得分:4)

TryParse返回true或false以指示成功。 out参数的值用于解析的值,或者在失败时使用0。所以:

int value;
if (Int32.TryParse(someText, out value))
{
    // Parse successful. value can be any integer
}
else
{
    // Parse failed. value will be 0.
}

因此,如果传入“0”,它将执行第一个块,而如果传入“坏数字”,它将执行第二个块。

答案 1 :(得分:1)

你没有提到要使用collection["id"]而是......

来自Int32.TryParse Method (String, Int32)

  

此方法返回时,包含32位有符号整数值   相当于s中包含的数字,如果转换成功,   如果转换失败,则或为零。

由于collection["id"]大于Int32.MaxValue,您的会话似乎失败,但由于您没有告诉我们更多信息,因此几乎无法给出确切答案..

Int64也有一个TryParse方法,我认为它可以保持你的价值;

int resultid;
bool success = Int64.TryParse(collection["id"], out resultid);

答案 2 :(得分:-1)

string s1 = "1234"; 
string s2 = "1234.65"; 
string s3 = null; 
string s4 = "123456789123456789123456789123456789123456789";


 success = Int32.TryParse(s1, out result); //-- success => true; result => 1234 
 success = Int32.TryParse(s2, out result); //-- success => false; result => 0 
 success = Int32.TryParse(s3, out result); //-- success => false; result => 0 
 success = Int32.TryParse(s4, out result); //-- success => false; result => 0