请参阅以下代码:
string test = "";
int output = -1;
if (int.TryParse(test, out output))
{
Console.WriteLine("Parsed");
}
Console.WriteLine(output);
当TryParse()
失败时,不应该跳过该块,Console.WriteLine("Parsed")
未调用且output
的值是否相同(-1)?
它正在返回0
答案 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
。