|
|
連載:[完全版]究極のC#プログラミング
Chapter5 null許容型
川俣 晶
2009/09/28 |
|
|
5.6 3値論理型として使用できるbool?型
通常、論理型はtrue/falseという2つの値のいずれかを取る。それゆえに、trueでなければ必ずfalse、falseでなければ必ずtrueとなる。
よって、以下の2つの文は等価だと見なせる。
if ( 式 ) { 文1; } else { 文2; }
|
|
if ( !式 ) { 文2; } else { 文1; }
|
|
ところが世の中には、2つではなく3つの値で表す「3値論理型」が存在する。有名なものには、SQLの論理型がある。
nullを許容するbool?型は、true、false、nullという3種類の状態を持つことができるので、3値論理型として使用できる。そこで、bool?型に対する「&」と「|」の演算子は、SQLと互換性のある表5.1のような結果を出すようになっている。
x |
y |
x & y |
x | y |
true |
true |
true |
true |
true |
false |
false |
true |
true |
null |
null |
true |
false |
true |
false |
true |
false |
false |
false |
false |
false |
null |
false |
null |
null |
true |
null |
true |
null |
false |
false |
null |
null |
null |
null |
null |
|
表5.1 bool?型における「&演算」と「|演算」の演算結果 |
|
したがって、本来はできないはずのtrueとnullに対する&演算などが実行できる。
リスト5.9は実際にそれを行った例である。「a & b」は計算可能であり、変数cの値はnullになる。よって、このプログラムは「c == null」が成立するのでtrueを出力する。
using System;
class Program
{
static void Main(string[] args)
{
bool? a = true, b = null;
bool? c = a & b;
Console.WriteLine(c == null); // 出力:True
}
}
|
|
リスト5.9 3値論理型として使用したbool?型 |
Insider.NET 記事ランキング
本日
月間