0Pricing
C# Academy · レッスン

Nullable値型の基本

int?、double?を宣言し、Nullable について理解します。

「Nullable値型の基本」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

値型はnullにできません

通常、intは常に数値を保持し、nullになることはありません。しかし、測定値がない場合など、「値がない」ことを表したい場合があります。

using System;

class Program {
    static void Main() {
        int count = 0;
        Console.WriteLine(count);
    }
}

?によるnull許容型

値型の後ろに?を付けると、null許容型になります。int?は任意のint値またはnullを保持できます。

using System;

class Program {
    static void Main() {
        int? maybe = null;
        Console.WriteLine(maybe.HasValue);
        maybe = 42;
        Console.WriteLine(maybe);
    }
}

その他のnull許容型

どの値型でもnull許容型にできます。double?、bool?、DateTime?などがあります。

using System;

class Program {
    static void Main() {
        double? temp = null;
        bool? flag = true;
        Console.WriteLine(temp.HasValue + " " + flag);
    }
}

Nullable<T>の完全な表記

int?は、structであるNullable<int>の省略形にすぎません。どちらもまったく同じ型としてコンパイルされます。

using System;

class Program {
    static void Main() {
        Nullable<int> a = 10;
        int? b = 10;
        Console.WriteLine(a == b);
    }
}

nullの代入

null許容変数にはnullを自由に代入でき、後から実際の値を再代入できます。

using System;

class Program {
    static void Main() {
        int? id = 100;
        Console.WriteLine(id);
        id = null;
        Console.WriteLine(id.HasValue);
    }
}

nullのnull許容値を出力する

nullであるnull許容値を出力すると、「null」という単語ではなく空の文字列が出力されます。

using System;

class Program {
    static void Main() {
        int? value = null;
        Console.WriteLine("[" + value + "]");
    }
}

null許容型への暗黙的な変換

通常のintは、すべてのintが有効なnull許容intであるため、自動的にint?へ変換されます。

using System;

class Program {
    static void Main() {
        int x = 7;
        int? y = x;
        Console.WriteLine(y);
    }
}

メソッドの戻り値でのnull許容型

メソッドはnull許容型を返すことで、「値が見つかった」場合と「何も見つからなかった」場合を表せます。

using System;

class Program {
    static int? FindEven(int[] nums) {
        foreach (int n in nums)
            if (n % 2 == 0) return n;
        return null;
    }
    static void Main() {
        Console.WriteLine(FindEven(new[] {1, 3, 4}));
    }
}

null許容値の比較

等価比較は期待どおりに機能します。2つのnull許容値は、両方がnullである場合、または両方が同じ値を保持している場合に等しくなります。

using System;

class Program {
    static void Main() {
        int? a = null;
        int? b = null;
        Console.WriteLine(a == b);
        int? c = 5;
        Console.WriteLine(c == 5);
    }
}

null許容型を使う理由

null許容値型を使うと、データベースでNULLを許可する列や、ユーザーが空欄のままにしたフィールドなど、オプションのデータを自然に表現できます。

using System;

class Program {
    static void Main() {
        int? userAge = null;
        string msg = userAge.HasValue ? "Age set" : "Age unknown";
        Console.WriteLine(msg);
    }
}

Nullableはstructです

Nullable<T>自体が値型であるため、null許容変数はnullにできる場合でも参照型ではありません。

using System;

class Program {
    static void Main() {
        int? n = 3;
        Console.WriteLine(n.GetType().Name);
    }
}

理解度チェック

null許容値型についての理解度を確認します。

まとめ

intのような値型は、デフォルトではnullにできません。?を追加するとnull許容型(int?)が作成され、これはNullable<T>の省略形です。

null許容型を使うと、欠落したデータやオプションのデータを表現できます。基になる型から暗黙的に変換でき、null許容型自体もstructです。

よくある質問

「Nullable値型の基本」レッスンは無料ですか?

はい。「Nullable値型の基本」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「Nullable値型の基本」で何を学びますか?

int?、double?を宣言し、Nullable について理解します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Nullable値型の基本」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Nullable値型の基本
  2. HasValueとValueプロパティ
  3. Null合体演算子
  4. 計算におけるNullable
← C# Academyに戻る