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



请参阅以下代码:

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 .

相关内容

最新更新