System.Nullable構造体は.NET 2.0から追加された構造体です。
これは、intなどのnullを受け入れる事が出来ない型に対して
nullを許容させるために使用します。
nullを許容するようにするには、宣言時に
int? id;
のようにします。このようにして宣言された場合
id = null;
のようにnullを割り当てる事ができるようになります。
また、Nullableと同様に.NET 2.0で追加された??演算子
は、値がnullの場合にデフォルト値を割り当てること出来るよう
になっています。以下のようにして使用します。
int realId = id ?? -1;
上記の場合、id変数の値がnullの場合は-1がrealIdに割り当てられます。
以下サンプルです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using Gsf.Research.ClassLibrary; namespace Gsf.Research.ClassLibrary.System{ /// <summary> /// System.Nullable構造体のサンプルクラスです。 /// </summary> /// <remarks> /// System.Nullable構造体は.NET 2.0から追加された構造体です。 /// これは、intなどのnullを受け入れる事が出来ない型に対して /// nullを許容させるために、使用します。 /// nullを許容するようにするには、宣言時に /// /// int? id; /// /// のようにします。このようにして宣言された場合 /// /// id = null; /// /// のようにnullを割り当てる事ができるようになります。 /// /// また、Nullableと同様に.NET 2.0で追加された??演算子 /// は、値がnullの場合にデフォルト値を割り当てること出来るよう /// になっています。以下のようにして使用します。 /// /// int realId = id ?? -1; /// /// 上記の場合、id変数の値がnullの場合は-1がrealIdに割り当てられます。 /// Nullable型で主に使用するプロパティは、以下です。 /// -HasValue /// -Value /// </remarks> public class NullableResearch00 : IExecutable{ public void Execute(){ int normalIntValue = 100; int? nullableIntValue = 100; Display(normalIntValue); Display(nullableIntValue); // // normalIntValueには、nullは割り当てられない. // // 以下はERRORとなる //normalIntValue = null; // // null許容型として宣言したnullableIntValueはnullが割り当てられる. // nullableIntValue = null; Display(normalIntValue); Display(nullableIntValue); } /// <summary> /// int型に対するメソッドです。 /// </summary> void Display(int i){ Console.WriteLine(i); } /// <summary> /// int?(つまりNullable)型に対するDisplayメソッドのオーバーロードです。 /// </summary> void Display(int? i){ Console.WriteLine("Nullable.HasValue={0}", i.HasValue); // // Valueプロパティは、値がnullの場合InvalidOperationException // をスローします。 // HasValueで確認するか、??演算子を利用するか、GetValueOrDefaultを利用します。 // if(i.HasValue){ Console.WriteLine("Nullable.Value={0}", i.Value); } Console.WriteLine("Nullable.GetValueOrDefault={0}", i.GetValueOrDefault()); Console.WriteLine("Nullable.??={0}", i ?? -1); } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場