请参阅以下代码:
string test = "";
int output = -1;
if (int.TryParse(test, out output))
{
Console.WriteLine("Parsed");
}
Console.WriteLine(output);
失败时TryParse()
,不应该跳过块,Console.WriteLine("Parsed")
不调用并且值output
相同(-1)吗?
它回来了0
来自MSDN:
当此方法返回时,如果转换成功或转换失败,则包含与字符串中包含的数字等效的 32 位有符号整数值。
zero
的实现TryParse
必须在返回之前默认out
参数,否则它将无法编译 -无论out
您是否已从调用方初始化参数。任何带有参数的方法都是这种情况,out
并不特定于TryParse
.
当解析失败时,编码它的人选择将参数默认为零。
重要的部分是你不应该认为任何out
参数方法在传入时都会尊重参数的原始值out
。事实上,它永远不会尊重参数,因为编译器会报告:
使用未分配的输出参数'blah'
如果您在方法内分配给它之前尝试使用参数值。因此,您实际上可以保证您作为out
参数分配和提供的任何值都将被忽略/覆盖。
如果它失败,它将return false
不会执行 if 语句中的代码。
如果转换失败,它也会重新调整0
,这就是为什么output=0
在 C# 中,out
必须将参数分配给并且最初不能从中读取。(当方法启动时,out
参数被视为未初始化的变量。)
因此,之前的值output
是无关紧要的。它必须由编写方法的人覆盖TryParse
,否则无法编译。
同时,该TryParse
方法无法访问 的先前值output
。因此,必须选择一些值。在这种情况下,开发人员选择了0
.