C#では、変数には値型と参照型の2種類が存在します。値型変数には null を割り当てることができませんが、参照型変数には null を割り当てることができます。文字列は参照型であるため、null になる可能性があります。このトピックでは、C# の Null 許容文字列について学習します。
値の型に null を割り当てるには、Nullable
説明付き構文
文字列変数に null を割り当てる構文は次のとおりです。
string str = null;
ここで、str は文字列型の変数で、「null」は null 値を指定するために使用されるキーワードです。上記のステートメントでは、string は参照型であり、null 値を保持できるため、string に直接 null を代入しています。
Nullable
Nullable<dataType> variableName = null;
Nullable 型を使用する別の方法は次のとおりです。
dataType? variableName = null;
dataType は、上記 2 つのステートメントの任意の値型のデータ型であり、variableName は変数に指定されたユーザー定義の名前です。
C# の Null 許容型は、int、float、bool 型などの値型変数に null 値を割り当てます。これは、これらの変数には null 値を格納できないためです。一方、nullable は null 値を直接格納できるため、string またはその他の参照型変数では使用できません。
Nullable 型は、構造体 System.Nullable
//bool
の nullable に null を格納できるため、以下のステートメントは有効ですNullable<bool> boolVal = null;
//bool 型の変数に null を格納できないため、以下のステートメントは無効です
bool boolVal = null;
上記のステートメントを使用すると、「null は非 null 値型であるため、null を bool に変換できません。」というエラーが表示されます。
null 許容型を作成するもう 1 つの方法は、以下に示すように「?」演算子を使用することです。
bool? boolVal = null;
ここで、null 許容型の値にアクセスするには、GetValueOrDefault() メソッドを使用する必要があります。このメソッドを使用すると、値が null でない場合に、元の割り当て値を取得できます。一方、値が null の場合は、デフォルト値のゼロが取得されます。
これとは別に、Nullable.HasValue を使用して、オブジェクトに値が割り当てられているかどうかを確認できます。オブジェクトに値が割り当てられている場合、オブジェクトに値が含まれていない場合は true を返します。
null 許容型を「var」とともに使用することはできません。また、null 許容型をネストすることもできません。コンパイル時エラーが発生します。
ここで、C# の null 文字列について話しましょう。 C# では null を文字列に直接代入したり、「string.」を使用して文字列を代入したりできます。 「Empty」読み取り専用フィールド。文字列が空であることを表します。
null 文字列ではメソッドを呼び出すことはできず、null 文字列では文字列プロパティを使用できませんが、空の文字列では同じことができます。たとえば、文字列を使用して空の文字列の長さをチェックするとします。 Length プロパティを使用すると、結果はゼロとして返されますが、NULL 文字列の長さをチェックすると、「System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません」というランタイム例外が発生します。 NULL 文字列に対して文字列メソッドを呼び出そうとすると、同じ例外が発生します。これは、NULL 文字列は System のインスタンスではないためです。弦。これは、次のステートメントを利用して理解できます:
空の文字列の例:
string str = string.Empty; int a = str.Length; //the result of this statement will be zero
ヌル文字列の例:
string str = null; int a = str.Length; //this statement will give NullReferenceException
さまざまな例を以下に示します:
null 許容型の作成方法を示す例。
コード:
using System; namespace ConsoleApp4 { public class Program { public static void Main() { try { //defining nullable type for int Nullable<int> intVal1 = null; int result1; Nullable<int> intVal2 = 53; int result2; //using GetValueOrDefault() //to get value from nullable type result1 = intVal1.GetValueOrDefault(); result2 = intVal2.GetValueOrDefault(); Console.WriteLine("Integer having null: {0}", result1); Console.WriteLine("Integer having value: {0}", result2); } catch(Exception exception) { Console.WriteLine(exception.Message); Console.ReadLine(); } Console.ReadLine(); } } }
出力:
たとえば、「?」演算子を使用して null 許容型を作成し、HasValue を使用して値が含まれているかどうかをチェックします。
コード:
using System; public class Program { public static void Main() { try { //defining nullable type //using '?' operator int? intVal1 = null; bool result1; int? intVal2 = 53; bool result2; //using HasValue to check // if the object has been assigned a value or not result1 = intVal1.HasValue; result2 = intVal2.HasValue; Console.WriteLine("Integer having null: {0}", result1); Console.WriteLine("Integer having value: {0}", result2); } catch (Exception exception) { Console.WriteLine(exception.Message); Console.ReadLine(); } Console.ReadLine(); } }
出力:
IsNullOrEmpty() メソッドを使用して、文字列が null、空、または値が含まれているかどうかを確認する例。
コード:
using System; public class Program { public static void Main() { string str1 = null; string str2 = string.Empty; string str3 = "Learning C#"; Console.WriteLine("str1 is null or empty: {0}", string.IsNullOrEmpty(str1)); Console.WriteLine("str2 is null or empty: {0}", string.IsNullOrEmpty(str2)); Console.WriteLine("str3 is null or empty: {0}", string.IsNullOrEmpty(str3)); Console.ReadLine(); } }
出力:
C# では、int、float、bool、double 型などの値型変数は null 値を格納できませんが、string などの参照型変数は null 値を格納できます。 Null 値を値型変数に格納するには、Nullable
以上がC# の Null 許容文字列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。