はじめに
C#でプログラミングをしていると、bool?型(Nullable型のbool)をif文に渡すケースがあります。この場合、三値論理(true/false/null)を意識しないと、予期せぬ挙動やバグにつながる可能性があります。本記事では、bool?をif文で使用する際の注意点と、その適切な扱い方について解説します。
bool?が取る値
bool?は、Nullableの糖衣構文で、true、false、nullの3つの状態を持つ型です。nullは「値が未設定」や「状態が不明」を表す場合に使用されます。
ifにTrueでもFalseでもなくnullが判定基準の場合は?
C#ではif文の条件文にnullをそのまま入れるとfalseになります。
これは、たとえif文のelse句に入ったからといって、条件文の結果がfalseなのかnullなのか判断できないことになります。
明示的にnullを扱う方法
nullを明確に区別する場合は、nullableBoolを直接if文に渡すのではなく、条件分岐を明示的に記述する必要があります。
nullable.css
bool? nullableBool = null;
if (nullableBool == true)
{
Console.WriteLine("Condition is true.");
}
else if (nullableBool == false)
{
Console.WriteLine("Condition is false.");
}
else
{
Console.WriteLine("Condition is null.");
}
簡潔に書くのであれば、 三項演算子 や ??(null合体演算子) 、switch文 を使用してもよいでしょう。
終わりに
nullは「値が存在しない状態」または「参照が設定されていない状態」を示すので、メモリ管理の経験が少ないと感覚が掴みにくいですが、if文などの条件文で関係してくる場合は気をつけなくてはいけません。