2012-02-01 55 views
23

null値のbool値を変換しようとしていますが、このエラーが発生しています。例えばbool型を暗黙的に変換できませんか?

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?) 

public virtual bool? MyBool 
    { 
    get; 
    set; 
    } 

if (!MyBool){} 
+2

つまり、null可能なboolは混乱します。 (ちょうどSQLを見て) – SLaks

+0

私はこれがあまりにも混乱しているとは思わない、それはちょうど三項論理です:http://en.wikipedia.org/wiki/Three-valued_logic - 私は何かの概念が好き価値がない。つまり、初期化されていないものと初期化されています。 – dyslexicanaboko

答えて

30

はエラー状態として、あなたは条件付きでbool?を使用することはできません。 (それはnullだ場合はどうなるでしょう?)

代わりに、あなたはnullを含めるかどうかに応じて、if (MyBool != true)またはif (MyBool == false)を書くことができます。

しかし、あなたはそれが実際に開始する価値がないことをテストする必要があります:あなたは、たとえばMyBool.Value

を使用する必要が

+5

もう1つの有効なチェックは 'MyBool ??私は一般的に 'MyBool.GetValueOrDefault()'を好みますが。 –

+0

@AnthonyPegram:しかし、それは否定のために余分な括弧を必要とし、さらに混乱します。 – SLaks

+0

私は最初に同意しませんが、私は2番目の使用や使用をもっと難しくしません。一般的に、私はLinq-to-EFクエリーでは正確にそうしていますが、このメソッドはサポートされていないため、真または偽への直接比較は好きではありません。 –

9

は(そして、あなたはことを説明するコメントを追加する必要があります) 。これは、MyBoolに値があり、falseであることをテストします。

コードブロックが割り当てられていないか、またはがfalseの場合、コードブロックを実行することが本当に必要な場合があります。

if (!MyBool.HasValue || !MyBool.Value) { } 

質問は本当にあなたがnull, true or falseの3つの可能な条件を処理する方法を、あなたが本当にそうならば、NULL可能ブール変数を持っているとするためのものかどうかに帰着します。

2

値があるかどうかを確認する必要があります。 MyBool == nullの場合はどうしますか?

if(MyBool.HasValue && !MyBool.Value) // MyBool is false 
if(MyBool.HasValue && MyBool.Value) // MyBool is true 
if(!MyBool.HasValue) // MyBool is null 
関連する問題