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

C# 如何判断是否已设置out参数?,c#,out,C#,Out,是否有办法知道是否已经设置了out参数。这是我正在寻找的伪代码: public virtual string blabla(long num, out bool bval) { if (!bval.HasValue) { //Do some default logic bval = defaultValue; } return blabla2(num, bva

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

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

        return blabla2(num, bval);
    }
除了出色的回答之外,如果您希望参数仍然是
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);
}
你不能-你不能读取变量,直到它被明确地分配到你的方法中。您应该将其视为一个局部变量,在方法开始时声明但未指定任何值,但在返回之前必须为其指定值。(如果引发异常,则可以不为其赋值。)

如果希望参数携带信息作为方法的输入并将信息传播出去,则应使用
ref
而不是
out


有关更多信息,请参阅。

如果您希望方法中出现某些内容,而不仅仅是传出,请使用“ref”而不是“out”。看起来您需要一个可空类型:
ref bool?bval
out参数更适合我的情况。但我只是想看看是否有办法检查是否已经赋值。无论如何,谢谢。@Omtara:你说的“如果已经赋值”到底是什么意思?你的意思是在方法之外,还是在你自己的方法之内?如果你的意思是在你自己的方法中,你可以自己用一个单独的
bool
局部变量来跟踪它。然而,在大多数地方,不知道自己在代码中的位置是很奇怪的。@Omtara-当您在注释中说调用当前方法的外部方法使用的是相同的out参数时,out参数如何更合适?@Joanna:我最后稍微改变了逻辑,使其与out参数一起工作。但是,正如@henk holterman所建议的,ref Nullable是一种很好的方法,可以知道它是否已设置。需要检查out参数的方法是从使用相同out参数的另一个方法调用的。因此,使用局部可为null的变量将不起作用。@Omtara-如果您发布这些方法调用的代码(或伪代码),可能会有所帮助