代码之家  ›  专栏  ›  技术社区  ›  Will

为什么integer.typarse在失败时将结果设置为零?

  •  3
  • Will  · 技术社区  · 6 年前

    我对integer.typarse()函数的理解是,它试图从传入的字符串中分析一个整数,如果分析失败,结果整数将保持不变。

    我有一个默认值为-1的整数,如果解析失败,我希望保持在-1。但是,integer.typarse()函数在分析失败时会将此默认值更改为零。

    Dim defaultValue As Integer = -1
    Dim parseSuccess As Boolean = Integer.TryParse("", defaultValue)
    Debug.Print("defaultValue {0}", defaultValue)
    Debug.Print("parseSuccess {0}", parseSuccess)
    

    我的期望是上面的代码片段应该输出:

    defaultValue -1
    parseSuccess False
    

    但是,它输出:

    defaultValue 0
    parseSuccess False
    

    我的理解正确吗?

    2 回复  |  直到 15 年前
        1
  •  20
  •   Jon Skeet    15 年前

    这是一个 out 参数,也就是说 必须 由方法设置(除非它引发异常)-该方法看不到原始值是什么。

    另一种选择是 ref 参数,并且只将其设置为成功,但这意味着强制调用方首先初始化变量,即使它们 没有 想要这种行为。

    但是,您可以编写自己的实用方法:

    public bool TryParseInt32(string text, ref int value)
    {
        int tmp;
        if (int.TryParse(text, out tmp))
        {
            value = tmp;
            return true;
        }
        else
        {
            return false; // Leave "value" as it was
        }
    }
    
        2
  •  3
  •   bernhardrusch    15 年前

    你是对的,如果失败,台盼色会使用0。(msdn说得很清楚) 但是您可以检查passesuccess并返回您的默认值,如果这是您想要的。