if 语句中的空条件布尔值



我有一个返回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?的情况下,你有三值逻辑:truefalsenull,因此你必须明确地输入是否应该将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

最新更新