有没有办法知道是否已经设置了out参数。这是我正在寻找的伪代码:
public virtual string blabla(long num, out bool bval)
{
if (!bval.HasValue)
{
//Do some default logic
bval = defaultValue;
}
return blabla2(num, bval);
}
答案 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);
}