web-dev-qa-db-ja.com

型boolを暗黙的に変換できませんか?

Null値を許可する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){}
24
user603007

エラーが示すように、条件文で_bool?_を使用することはできません。 (nullの場合はどうなりますか?)

代わりに、nullを含めるかどうかに応じて、if (MyBool != true)またはif (MyBool == false)を記述できます。 (そして、それを説明するコメントを追加する必要があります)

30
SLaks

MyBool.Valueを使用する必要があります

例えば:

if (!MyBool.Value) { }

ただし、実際に最初から値があることをテストする必要があります。これは、MyBoolに値があり、falseであることをテストします。

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

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

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

質問は本当に、null可能なブール変数を持つことを本当に意図していたかどうか、もしそうなら、null, true or falseの3つの可能な条件をどのように処理したいかに要約されます。

9
NotMe

値があるかどうかを確認する必要があります。 MyBool == null

if( MyBool.HasValue && !MyBool.Value ) // MyBool is false
if( MyBool.HasValue && MyBool.Value ) // MyBool is true
if( !MyBool.HasValue ) // MyBool is null
2