7

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

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

        return blabla2(num, bval);
    }
4

2 回答 2

12

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

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

有关更多信息,请参阅我关于参数传递的文章。

于 2012-04-28T18:34:37.560 回答
2

除了Jon 的出色回答之外,如果您希望参数仍然是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);
}
于 2012-04-28T18:34:26.217 回答