我有一个返回boolean
event
。为了确保只有在有人在侦听时才触发事件,我使用 null 条件运算符(问号(调用它。但是,这意味着我还必须将 null 条件运算符添加到返回的布尔值中。这意味着我无法弄清楚之后如何在 if 语句中使用它。有谁知道如何处理这个问题?
switch (someInt)
{
case 1:
// Validate if the form is filled correctly.
// The event returns true if that is the case.
bool? isValid = ValidateStuff?.Invoke();
if (isValid)
// If passed validation go to next step in form
GoToNextStep?.Invoke();
break;
// There are more cases, but you get the point
(...)
}
您可以使用
if (isValid.GetValueOrDefault())
如果isValid
null
,这将给出false
.
或使用??
运算符
if (isValid ?? false)
如果未null
,则返回左操作数的值,否则返回右操作数的值。所以基本上是简写
if (isValid == null ? false : isValid)
问题是,在 Nullable bool?
的情况下,你有三值逻辑:true
、false
和 null
,因此你必须明确地输入是否应该将null
视为true
,例如:
if (isValid != false) // either true or null
GoToNextStep?.Invoke();
或null
应被视为false
:
if (isValid == true) // only true
GoToNextStep?.Invoke();
你可以使用这个:
if (isValid.HasValue && isValid.Value)
一种选择是测试isValid
是否具有值:
if (isValid.HasValue && (bool)isValid)
另一种选择是在没有人收听您的事件时为isValid
提供一个默认值。这可以使用空合并运算符完成:
bool isValid = ValidateStuff?.Invoke() ?? true; // assume it is valid when nobody listens