out参数 - 为什么它不起作用

时间:2010-06-28 11:49:26

标签: c#

以下是一个失败的单元测试,解释了我今天发现的错误:

    [TestMethod]
    public void WFT()
    {
        string configDebug = "false";
        bool configDebugEnabled = bool.TryParse(configDebug, out configDebugEnabled);

        Assert.AreEqual(false, configDebugEnabled);
    }

这是如何让测试从红色变为绿色:

    [TestMethod]
    public void WFT()
    {
        string configDebug = "false";
        bool configDebugEnabled;
        bool.TryParse(configDebug, out configDebugEnabled);

        Assert.AreEqual(true, configDebugEnabled);
    }

我无法在C#规范中找到解释这一段的段落,但对这种行为很可能是一个不错的解释。任何人都可以向我解释为什么第一次测试失败了吗?

7 个答案:

答案 0 :(得分:5)

因为如果解析成功,TryParse方法总是返回true,如果不成功,则false。在第一种情况下,解析成功configDebugEnabled = true,这不是你断言的。

顺便说一句,除非你写string configDebug = "true",否则第二次测试也会失败。

答案 1 :(得分:2)

它失败的原因是您使用相同的变量来存储TryParse本身的成功或失败。由于解析成功(字符串确实转换为布尔值),您将使用false覆盖返回的true值。

答案 2 :(得分:1)

因为bool.TryParse的返回参数是“true”,如果它能够进行转换 - 返回参数不是转换的结果。

你用bool.TryParse()本身的返回来覆盖结果(在out参数中)。

答案 3 :(得分:1)

在这一行

bool configDebugEnabled = bool.TryParse(configDebug, out configDebugEnabled);

变量configDebugEnabled首先设置为false(作为解析的结果),但紧接在after之后设置为true(因为如果解析成功,则TryParse返回true)。为什么不直接使用bool.Parse?

答案 4 :(得分:0)

为什么您希望out参数返回true

答案 5 :(得分:0)

bool.TryParse返回一个bool来指定​​解析是否成功。您将该结果分配给放在out参数中的相同bool变量。

您需要一个单独的变量来测试函数是否成功。

答案 6 :(得分:0)

您可以从返回值和out参数中分配变量configDebugEnabled。 如果变量在结尾处为false,则您不知道解析是否失败或解析的值是否为false。

这样做:

bool IsOk;
bool configDebugEnabled = bool.TryParse(configDebug, out IsOk);