TryParse() - 为什么这段代码返回0,结果不应为-1?

时间:2012-06-13 09:57:15

标签: c# .net console tryparse

请参阅以下代码:

string test = "";
int output = -1;

if (int.TryParse(test, out output))
{
    Console.WriteLine("Parsed");
}

Console.WriteLine(output);

TryParse()失败时,不应该跳过该块,Console.WriteLine("Parsed")未调用且output的值是否相同(-1)?

它正在返回0

4 个答案:

答案 0 :(得分:15)

来自MSDN

  

当此方法返回时,包含等效于字符串中包含的数字的32位有符号整数值,如果转换成功,则zero如果转换失败。

答案 1 :(得分:10)

TryParse 的实施默认out参数,然后返回,否则无法编译 - 无论 是否已从主叫方初始化out参数。对于带有out参数的任何方法都是如此,并非特定于TryParse

编码的人在解析失败时选择了default the parameter to zero

重要的是你不应该认为任何out参数方法在传入时都会尊重out参数的原始值。事实上,它永远不会尊重参数,因为编译器将报告:

  

使用未分配的参数'blah'

如果在方法内部分配参数值之前尝试使用该参数值。因此,您实际上可以保证您分配和赋予out参数的任何值都将被忽略/覆盖。

答案 2 :(得分:2)

如果失败,它将return false并且if语句中的代码将不会被执行。

如果转化失败,它也会重新调整0这就是为什么output=0

答案 3 :(得分:2)

在C#中,必须分配out个参数,并且最初不能从中读取。 (当方法启动时,out参数将被视为未初始化的变量。)

因此,output的先前值无关紧要。它必须被编写TryParse方法的人覆盖,否则无法编译。

同时,TryParse方法无权访问output的先前值。因此,必须选择一些价值。在这种情况下,the developers chose 0