English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
値型には null を割り当てることができません。例えば、int i = null コンパイル時エラーが発生します。
c# 2.0 で可空型が導入され、値型変数に null を割り当てることができます。Nullable<t> を使用して可空型を宣言できます。ここで T は型です。
Nullable<int> i = null;
可空型はその基本値型の正しい値範囲を表すことができますが、追加で空値も表します。例えば、Nullable < int > は、 -2147483648 まで 2147483647 のどの値でも、または null 値です。
Nullable 类型は System.Nullable < t > struct のインスタンスです。
[Serializable] public struct Nullable<T> where T : struct { public bool HasValue { get; } public T Value { get; } // 他の実装 }
Int 型の nullable は通常の int 型と同じですが、値があるかどうかを示すフラグが追加されています。それ以外はすべてコンパイラのマジックで、null を有効な値として扱います。
static void Main(string[] args) { Nullable<int> i = null; if (i.HasValue) Console.WriteLine(i.Value); // 或 Console.WriteLine(i) else Console.WriteLine("Null"); }
Null
オブジェクトに値が割り当てられている場合、trueを返します;値が割り当てられていないまたはnull値が割り当てられている場合、falseを返します。
NullableType.value 型がnullまたは値が割り当てられていない場合、NullableType.valueを使用して値にアクセスするとランタイムエラーが発生します。たとえば、iがnullの場合、値にアクセスすると例外が発生します:
nullでない場合 GetValueOrDefault() メソッドを使用して実際の値を取得します;nullの場合はデフォルト値を使用します。たとえば:
static void Main(string[] args) { Nullable<int> i = null; Console.WriteLine(i.GetValueOrDefault()); }
「?」演算子を使用して、int ?, long?などのNullable <T>を使用しないでシンプルな表記にすることができます。
int? i = null; double? D = null;
「??」演算子を使用して、nullになる可能性のある型をnullでない型に割り当てます。
int? i = null; int j = i ?? 0; Console.WriteLine(j);
0
上記の例では、iはnullになる可能性のあるintで、それをnullでないint jに割り当てる場合、iがnullの場合はランタイムエラーが発生します。したがって、例外が発生するリスクを減らすために、「??」演算子を使用し、iがnullの場合は0をjに割り当てます。
using System; namespace CalculatorApplication { class NullablesAtShow { static void Main(string[] args) { double? num1 = null; double? num2 = 3.14157; double num3; num3 = num1 ?? 5.34; // num1 空値の場合は返します 5.34 Console.WriteLine("num3 の値: {0}", num3); num3 = num2 ?? 5.34; Console.WriteLine("num3 の値: {0}", num3); Console.ReadLine(); } } }
出力結果:
num3 の値: 5.34 num3 の値: 3.14157
null型の代入規則は値型の代入規則と同じです。関数内でnull型をローカル変数として宣言する場合、使用する前に代入する必要があります。それがどのクラスのフィールドである場合、デフォルトでは空値があります。
たとえば、以下のint型のnullableを宣言し、値を割り当てずに使用します。コンパイラは出力します「未分配のローカル変数 'i' を使用しています」エラー:
以下の例では、int 型の nullable がこのクラスのフィールドであり、エラーが発生しません。
class MyClass { public Nullable<int> i; } class Program { static void Main(string[] args) { MyClass mycls = new MyClass(); if (mycls.i == null) Console.WriteLine("Null"); } }
Null
Null は他のどの値よりも小さいと見なされます。したがって、比較演算子は null に対して使用できません。以下の例では、i は j より小さくも大きくもなく、j に等しくありません:
static void Main(string[] args) { int? i = null; int j = 10; if (i < j) Console.WriteLine("i < j"); else if (i > 10) Console.WriteLine("i > j"); else if (i == 10) Console.WriteLine("i == j"); else Console.WriteLine("比較不可"); }
比較不可
Nullable 静的クラスは Nullable 型の補助クラスです。可空型の比較メソッドを提供しており、GetUnderlyingType メソッドも持ちます。これは可为nullの型の基本型パラメータを返します。
static void Main(string[] args) { int? i = null; int j = 10; if (Nullable.Compare<int>(i, j) < 0) Console.WriteLine("i < j"); else if (Nullable.Compare<int>(i, j) > 0) Console.WriteLine("i > j"); else Console.WriteLine("i = j"); }
i < j
可空型は値型と一緒に使用できます。
Value が null である場合、Value プロパティは InvalidOperationException をスローします;それ以外の場合は値を返します。
変数が値を含んでいる場合、HasValue 属性は true を返します;null である場合、false を返します。
== と != 运算子は null が許される型と一緒に使用できます。他の比較には Nullable 静的クラスを使用してください。
ネストされた可変長型の使用は許可されていません。Nullable <Nullable <int >> i; はコンパイル時エラーを返します。
Nullable <T>型は、値型にnullを割り当てることを許可します。
?演算子はNullable型の短縮記法です。
可変長型の値を取得するにはvalue属性を使用します。
使用HasValue属性が値に値を割り当てるかどうかを確認します。可変長空の型。
静的Nullableクラスは、可変長型を比較するためのヘルパークラスです。