【问题标题】:TryParse() - Why does this code return 0, shouldn't the result be -1?TryParse() - 为什么这段代码返回 0,结果不应该是 -1?
【发布时间】:2012-06-13 09:57:14
【问题描述】:

见以下代码:

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

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

Console.WriteLine(output);

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

它正在返回0

【问题讨论】:

  • 你应该只在if里面使用output,因为只有在里面你才知道解析成功。

标签: c# .net console tryparse


【解决方案1】:

来自MSDN

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

【讨论】:

    【解决方案2】:

    TryParse 的实现在返回之前默认out 参数否则它不会编译 - 不管是否您已经从调用方初始化了 out 参数。带有out 参数的any 方法就是这种情况,并不特定于TryParse

    当解析失败时,编码它的人选择default the parameter to zero

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

    使用未分配的输出参数'blah'

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

    【讨论】:

    • 谢谢,现在这很有意义,尽管乍一看很容易误导。
    • @Duane 确实可以,但这一切都源于out 参数的使用——除了选择作为默认值的值之外,这里没有特定于TryParse
    【解决方案3】:

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

    如果转换失败,它也会返回0,这就是output=0的原因

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多