请参阅以下代码:
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
参数时都会遵循该参数的原始值。事实上,它永远不会遵循编译器将报告的参数:
使用未分配的 out 参数 'blah'
如果在方法中分配给参数值之前尝试使用参数值。因此,您实际上可以保证您作为out
参数分配和提供的任何值都将被忽略/覆盖。
如果失败,它将return false
,并且 if 语句中的代码将不会执行。
如果转换失败,它也将重新调整0
这就是output=0
在 C# 中,必须out
参数分配给并且最初不能从中读取。(当方法启动时,out
参数被视为未初始化的变量。
因此,output
的先前值无关紧要。它必须由编写TryParse
方法的人覆盖,否则无法编译。
同时,TryParse
方法无法访问以前的值 output
。因此,必须选择一些值。在这种情况下,开发人员选择了 0
.