C# 如何判断是否已设置out参数?
是否有办法知道是否已经设置了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
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-如果您发布这些方法调用的代码(或伪代码),可能会有所帮助