|  |  | 
 
| 連載:[完全版]究極の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 記事ランキング
		
		
			本日
			月間