如何判断是否已设置out参数?

时间:2012-04-28 18:31:45

标签: c# out

有没有办法知道是否已经设置了out参数。这是我正在寻找的伪代码:

public virtual string blabla(long num, out bool bval)
    {
        if (!bval.HasValue)
            {
            //Do some default logic
            bval = defaultValue;
            }

        return blabla2(num, bval);
    }

2 个答案:

答案 0 :(得分:12)

您不能 - 您无法读取变量,直到它在您的方法中明确分配为止。您应该将其视为局部变量,声明但在方法开始时未分配任何值 - 但您必须在返回之前为其分配值。 (如果抛出异常,可以不为它分配值。)

如果您想要一个将信息作为输入传递给方法的参数以及传播信息,您应该使用ref而不是out

有关详细信息,请参阅my article on parameter passing

答案 1 :(得分:2)

除了Jon's出色的答案外,如果您希望参数仍为out,但需要查看是否在方法内的某个位置分配了值,您可以使用本地可空类型如下:

public virtual string blabla(long num, out bool bval)
{
    bool? bvalLocal;

    ... //I'm assuming there is some code here that may or 
        //may not assign bvalLocal?

    // This whole if block may not be needed if the default
    // value is the default for the type (i.e. false) as
    // GetValueOrDefualt() will take care of that (see 
    // second to last line).
    if (!bvalLocal.HasValue)
    {
        //Do some default logic
        bvalLocal = defaultValue;
    }

    bval = bvalLocal.GetValueOrDefault();
    return blabla2(num, bval);
}