設計エラー
C#のnullは、明らかに誤りのある解決策であり、以前の言語から考え抜かれてコピーされたものです。
- 最悪の事態:あらゆる参照型の値として、普遍的な裏切り者を使用することができます-null、コンパイラはそれに対していかなる反応もしません。 ただし、実行中にback- NullReferenceExceptionでナイフを取得するのは簡単です。 この例外の処理は無益です。つまり、コード内の無条件のエラーを意味します。
 - 傷のコショウ:障害(逆参照しようとするときのNRE)は、欠陥から非常に遠く離れている可能性があります(本格的なオブジェクトが待機している場合はnullを使用します)。
 - 十分に飼育された毛皮のような動物:nullは不治です-プラットフォームと言語の将来の革新は、使用を止めるのが物理的に不可能な、より古いレガシーコードから私たちを救いません。
 
このPandoraの箱は、偉大なHoarによってALGOL W言語が作成されたときに開かれました。Hoarは 、後に彼自身のアイデアを10億ドルの間違いと呼びました。
最高の歴史的選択肢
もちろん、それは現代の標準から明らかでした
- 意味のあるタイプと参照タイプの統一されたNullable。
 - 特別な演算子( 三項演算子-?: 、 エルビス-?. 、 コアレス-?? )のみを使用したNullableデリファレンス。例外をスローせずに両方のオプション(オブジェクトの有無)の必須処理を提供します。
 -  例: 
      
object o = new object(); // - object o = null; // - , null object? n = new object; // nullable - object? n = null; // nullable - object o = n; // - , object object? object o = n ?? new object(); // fallback (coalesce), n != null Type t = n ? value.GetType() : typeof(object); // - value n, null Type? t = n ? value.GetType(); // ? - null, null, , nullable
 - NRE : null , .
 
, . , .
, . .
null if. .
- , — .
 - , ,
 - (, )
 - .
 
- 
      
      
- R#
 - , : null , .
 
 Null object. , .
- null , : IEnumerable, , , .. — -.
 - : — null null object, : , NRE .
 
. .
, null, . , , .
- .
 
null: , Try OrDefault . . .
CanBeNull. - NotNull.
- R#
 - , NotNull
 - null .
 
C# (, , coalesce)
- null .
 - ArgumentException null NotNull .
 - .
 - , .
 
Optional. .
- NRE
 - .
 - , , .
 - memory traffic
 
Maybe. LINQ , .
- .
 - Optional .
 - , .
 - - .
 
- 
      
      
- , .
 - Code Contracts , .
 - , --.
 
 Fody/NullGuard. null .
- : , , , .
 - AllowNull — , — .
 - , null, AllowNull
 - , .
 - .
 - ( null , ).
 - , , null, .
 - — NullGuard .
 - , , .
 
null ( C#)
- .
 - NRE .
 - , ,
 - .
 - .
 
— :
| 4, 5, 7, 11, 12 ( ) | 1, 2 | 3, 6, 8, 9, 10 | 
20 , .
.