工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C#のヌル許容型:null値を安全に扱う完全ガイド

C#にはヌル許容型(nullable types)という特別なデータ型があり、通常の値の範囲に加えてnull値を割り当てることができます。

例えば、Nullable<Int32>変数には、-2,147,483,648から2,147,483,647の値またはnullを格納できます。同様に、Nullable<bool>変数にはtrue、false、またはnullを割り当てできます。

ヌル許容型の宣言構文

<data_type>? <variable_name> = null;

この?はNullable<T>のシンタックスシュガー(簡易記法)です。以下の2つは等価です:

int? num1 = null;
Nullable<int> num2 = null;

ヌル許容型の使用例

using System;
namespace CalculatorApplication {
    class NullablesAtShow {
        static void Main(string[] args) {
            int? num1 = null;
            int? num2 = 45;
            double? num3 = new double?();  // デフォルト値はnull
            double? num4 = 3.14157;
            bool? boolval = new bool?();   // デフォルト値はnull
            
            // 値の表示
            Console.WriteLine("Nullables at Show: {0}, {1}, {2}, {3}", num1, num2, num3, num4);
            Console.WriteLine("A Nullable boolean value: {0}", boolval);
            Console.ReadLine();
        }
    }
}

実行結果:

Nullables at Show: , 45, , 3.14157
A Nullable boolean value: 

※ nullの場合は空文字として表示されます。

ヌル許容型の主要プロパティとメソッド

メンバー説明
HasValue値を持っているかどうかを示すboolプロパティ
Value格納されている値を取得(値がない場合は例外)
GetValueOrDefault()値がある場合はその値、ない場合はデフォルト値(0等)を返す
GetValueOrDefault(T defaultValue)値がない場合に指定したデフォルト値を返す

プロパティの使用例

int? num = null;
Console.WriteLine(num.HasValue);           // False
Console.WriteLine(num.GetValueOrDefault()); // 0
Console.WriteLine(num.GetValueOrDefault(-1)); // -1

int? num2 = 42;
Console.WriteLine(num2.HasValue);           // True
Console.WriteLine(num2.Value);              // 42
// Console.WriteLine(num.Value);  // 例外: InvalidOperationException

Null 合体演算子(??)

Null合体演算子は、ヌル許容値型および参照型で使用されます。暗黙的な変換が可能な場合、オペランドを別のヌル許容(または非ヌル許容)値型の型に変換するために使用されます。

最初のオペランドの値がnullの場合、演算子は2番目のオペランドの値を返し、そうでなければ最初のオペランドの値を返します。

Null合体演算子の例

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がnullなので5.34が代入
            Console.WriteLine("Value of num3: {0}", num3);
            
            num3 = num2 ?? 5.34;  // num2はnullでないので3.14157が代入
            Console.WriteLine("Value of num3: {0}", num3);
            Console.ReadLine();
        }
    }
}

実行結果:

Value of num3: 5.34
Value of num3: 3.14157

Null 条件演算子(?. / ?[])

C# 6.0以降では、Null条件演算子を使用してnullチェックを簡潔に記述できます。

// 従来の書き方
if (person != null && person.Address != null) {
    Console.WriteLine(person.Address.City);
}

// Null条件演算子を使用
Console.WriteLine(person?.Address?.City);  // いずれかがnullならnullを返す

// 配列/リストの要素アクセス
var firstItem = list?[0];  // listがnullならnullを返す

null許容参照型(C# 8.0以降)

C# 8.0から、参照型もデフォルトでnon-nullableになり、明示的に?を付けてnullableにできます(プロジェクト設定で有効化が必要)。

#nullable enable
string nonNull = "hello";      // null非許容
string? nullable = null;       // null許容
nonNull = null;  // 警告: nullの代入
nullable = "world";  // OK

ベストプラクティス

C言語

  1. AgCu20 合金:23°C における包括的な機械的・熱的特性
  2. 合金 15CDV6(DIN 1.7734):高強度・高靭性、容易な溶接性
  3. DIN 1.7734 5 - 15CDV6合金:高強度、高靭性、容易な溶接性
  4. 15CDV6合金(DIN 1.7734) - 高強度、容易な溶接性、優れた靭性
  5. PtNi10 合金:包括的な機械的・熱的特性
  6. PtIr10 白金-イリジウム合金:高強度・高温材料
  7. Corroplastプレート – 精密機械加工向け高性能耐食鋼
  8. X46 AM FCE:重要パイプライン用途向け高性能API 5L鋼
  9. フェロ・チタニット® クロモニ – 高強度、非磁性チタン合金
  10. C#属性:メタデータでコードを拡張する完全ガイド
  11. Java 8 Optional完全ガイド:実践的なNull安全コードの書き方