2017-06-13 23 views
1

eventbooleanを返します。誰かが聞いている場合にだけイベントが発生することを確認するために、私はヌル条件付き演算子(疑問符)を使って呼び出す。 しかし、これは、返されたブール値にnull条件付き演算子を追加する必要があることを意味します。これは、後でif文でどのように使用するのか分かりません。誰もこれをどう扱うか知っていますか?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 
    (...) 
} 

答えて

7

あなたはisValidnullある場合falseを与える

if (isValid.GetValueOrDefault()) 

を使用することができます。

またはそれ以外nullと右オペランドの値でない場合、左オペランドの値を返し??オペレータ

if (isValid ?? false) 

を使用します。そこで、基本的

if (isValid == null ? isValid : false) 
+0

私は 'はisValid(場合を使用して終了し、答えをありがとう??偽) '、しかし私はいくつかの異なるオプションを持っているというコンセプトが好きです:-) – Noceo

2

一つのオプションの短縮形はisValidが値を持っている天気をテストするために、次のようになります。

if (isValid.HasValue && (bool)isValid) 

別のオプションは、誰もがあなたのイベントを聞いていないときisValidデフォルト値を与えることです。これはnull合体演算子を使って行うことができます。

bool isValid = ValidateStuff?.Invoke() ?? true; // assume it is valid when nobody listens 
2

あなたがこれを使用することができます:truefalsenullと:

if (isValid.HasValue && isValid.Value) 
+0

ありがとうございました。私は編集しました。 –

1

問題がのNullablebool?の場合、あなたはthree-valued logicを持っているということですしたがって、を明示的にとする必要があります。nullは、trueとして扱われます。

if (isValid != false)  // either true or null 
    GoToNextStep?.Invoke(); 

またはnullfalseとして考慮されなければならない:

if (isValid == true)  // only true 
    GoToNextStep?.Invoke(); 
+0

根本原因(3値論理)を指摘してくれてありがとう。あなたのリンクは少し壊れているようです(私は修正できませんでした)。 – Noceo

+0

@Noceo:ありがとう!リンクは実際には壊れている、私は答えを編集しました。 –

関連する問題