C#.netでnull許容型を使用する必要がある場合はどうなりますか?誰かが例を挙げて説明してもらえますか?
4 に答える
null許容型(null許容型を使用する場合)は、nullを値として取ることができる値型です。そのデフォルトはnull
、値を割り当てなかったことを意味します。値型の例は、int、float、double、DateTimeなどです。これらの型にはこれらのデフォルトがあります
int x = 0;
DateTime d = DateTime.MinValue;
float y = 0;
null許容型の代替案の場合、上記のいずれかのデフォルトはnullです。
int? x = null; //no value
DateTime? d = null; //no value
これにより、オブジェクト、文字列などの参照型のように動作します。
string s = null;
object o = null;
これらは、テーブルから返される値がである場合に、データベースからの値を処理するときに非常に役立ちますNULL
。データベーステーブルでNULLになる可能性のある整数値を想像してみてください。このような0
値は、c#変数がnull許容でない場合(通常の整数)でのみ表すことができます。
EndDate
また、将来の実際の時間まで値が決定されない列を想像してください。DBではNULLに設定できますが、C#に格納するにはnull許容型が必要です。
DateTime StartDate = DateTime.Today;
DateTime EndDate? = null; //we don't know yet
C#.netでnull許容型を使用する必要がある場合はどうなりますか?
id
特定のを表す整数変数があると想像してくださいid
。
1
、、またはその他のものを格納できます。44
ただし、IDがわからない場合はどうなりますか。-1
またはを格納することはできません0
。割り当てることを考えているかもしれませんnull
が、通常null
は値型に割り当てることはできません。
int id=null;//error
Nullable type
これを可能にします。
のような値型は値として表すint,double,char..
ことができませんNULL
。
値型で表すnull
には、.を使用する必要がありますnullable type
。
値型の後に続く値型として示されます?
int? id=null;
これはに変換されます
Nullable<int> id=new Nullable<int>();
null許容型のデフォルト値はですnull
。
Nullable 型は、C# 2.0 で導入された新しい概念であり、ユーザーは C# 言語のプリミティブ データ型に null 値を割り当てることができます。ここで重要なのは、Nullable 型が Structure 型であることです。
BlogPost: Nullable 型 - プログラミング言語に Nullable 型が必要な理由
from: http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx Nullable 型は System.Nullable 構造体のインスタンスです。null 許容型は、基になる値の型の値の通常の範囲に加えて、追加の null 値を表すことができます。たとえば、「Int32 の Nullable」と発音される Nullable<Int32> には、-2147483648 から 2147483647 までの任意の値を割り当てることも、null 値を割り当てることもできます。Nullable<bool> には、値 true または false、または null を割り当てることができます
class NullableExample
{
static void Main()
{
int? num = null;
if (num.HasValue == true)
{
System.Console.WriteLine("num = " + num.Value);
}
else
{
System.Console.WriteLine("num = Null");
}
//y is set to zero
int y = num.GetValueOrDefault();
// num.Value throws an InvalidOperationException if num.HasValue is false
try
{
y = num.Value;
}
catch (System.InvalidOperationException e)
{
System.Console.WriteLine(e.Message);
}
}
}