問題1
最初の書き方がビルドエラーになって、2番目の書き方がビルドエラーにならない時って、どんな場合でしょうか?
if(Hoge())Console.WriteLine("Hoge() == true");
if(Hoge()==true)Console.WriteLine("Hoge() == true");
答え
それは、Hogeメソッドが、bool?を返す場合です。
staticbool?Hoge(){// false や null を返すかもしれない returntrue;}
このような定義の場合、以下のコードはビルドエラーになってしまいます。
if(Hoge())Console.WriteLine("Hoge() == true");
問題2
それでは、以下の書き方以外でビルドエラーにならない書き方はあるでしょうか?
if(Hoge()==true)Console.WriteLine("Hoge() == true");
答え
??演算子を使って以下のように書けばビルドエラーは出なくなります。
if(Hoge()??false)Console.WriteLine("Hoge() == true");
Hige()の戻り値がnullならば ?? 演算子で falseにしています。これで、Hoge()がtrueの時だけ Hoge() ?? false
は、真になります。
問題3
それ以外の書き方はありますか?
答え
GetValueOrDefault()メソッドを使う方法もあります。
if(Hoge().GetValueOrDefault())Console.WriteLine("Hoge() == true");
bool値のdefault値はfalseなので、Hoge().GetValueOrDefault()
は、Hoge()がtrueの時だけ真になります。