C# Academy · レッスン

Nullable値型

int?とNullable構造体を学びます。

レッスン 1/413 ステップ

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

Nullable 値型が必要な理由

int、bool、DateTime などの値型は、常に値を保持します。int のデフォルト値は 0 であり、「値がない」状態にはなりません。

未回答のアンケート項目や、空のデータベース列など、データがないことを表したい場合があります。Nullable 値型を使うと、値型でありながら null も保持できるようになります。

int? で宣言する

値型の後ろに ? を付けると、Nullable にできます。int? は任意の整数または null を保持できます。

これは、日常的な C# コードで Nullable 値型を記述する最も一般的な方法です。

int? age = null;
int count = 5;
age = count;
System.Console.WriteLine(age);

Nullable<T> の内部動作

? 構文は省略記法です。int? は Nullable<int> とまったく同じ型です。

Nullable<T> は値型をラップする構造体で、値が存在するかどうかを追跡するフラグを追加します。

Nullable<int> a = 10;
int? b = 10;
System.Console.WriteLine(a == b);

HasValue と Value

Nullable には 2 つのプロパティが公開されています。値が存在するとき、HasValue は true になり、Value は基になる値を返します。

HasValue が false のときに Value を読み取ると、InvalidOperationException がスローされるため、先に確認してください。

int? score = 42;
if (score.HasValue)
{
    System.Console.WriteLine(score.Value);
}

完全な例

完全なプログラムを見てみましょう。値を代入し、HasValue を確認して、結果を出力します。

実際にデータを保持しているときに Nullable がどのように動作するか、実行して確認してください。

using System;

class Program
{
    static void Main()
    {
        int? temperature = 21;
        if (temperature.HasValue)
            Console.WriteLine("Temp: " + temperature.Value);
        else
            Console.WriteLine("No reading");
    }
}

Null の場合

null を代入すると、HasValue は false を返します。その後、else 分岐が実行されます。

このパターンを使うと、クラッシュさせずにオプションの値を安全に処理できます。

using System;

class Program
{
    static void Main()
    {
        int? temperature = null;
        if (temperature.HasValue)
            Console.WriteLine(temperature.Value);
        else
            Console.WriteLine("No reading");
    }
}

GetValueOrDefault

GetValueOrDefault() は、値が存在する場合はその値を返し、存在しない場合はその型の既定値(int なら 0 など)を返します。

独自の代替値を渡すこともできます。GetValueOrDefault(100) は、null の場合に 100 を返します。

int? quantity = null;
int result = quantity.GetValueOrDefault(100);
System.Console.WriteLine(result);

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

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

逆方向の変換は自動ではありません。int? から int に戻すには、null の可能性があるため、明示的なキャストか代替値が必要です。

int plain = 7;
int? wrapped = plain;
int back = (int)wrapped;
System.Console.WriteLine(back);

その他の値型での null 許容型

どの値型でも使用できます。bool?、double?、DateTime?、さらには独自の構造体にも使用できます。

bool? には、true、false、null の3つの状態があります。これは、はい・いいえの質問にまだ回答されていない状態を扱う場合に便利です。

bool? agreed = null;
double? price = 9.99;
System.Console.WriteLine(agreed.HasValue);
System.Console.WriteLine(price.Value);

参照型はもともと null 許容

string などのクラスや配列はもともと null になれるため、Nullable<T> ラッパーは必要ありません。

参照型の ?(string? など)は別の意味を持ちます。これは null 許容参照型の注釈であり、Nullable<T> 構造体ではありません。

null 許容型の比較

比較はできますが、null は特殊に扱われることに注意してください。2つの null は等しく、null を含む順序比較はすべて false を返します。

したがって、null < 5 は false であり、null > 5 も false です。

int? x = null;
System.Console.WriteLine(x < 5);
System.Console.WriteLine(x == null);

理解度チェック

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

まとめ

null 許容値型を使うと、値型でも null を保持できるようになります。int? と記述し、これは Nullable<int> と同じです。

HasValue で値の有無を確認し、Value で値を読み取ります(値が存在する場合に限ります)。安全な代替値には GetValueOrDefault() を使用します。参照型は、それ自体がすでに null 許容です。

無料で開始

AI チューターと学ぶ C# — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
93
レッスン
346

よくある質問

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

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

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

int?とNullable構造体を学びます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

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

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

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

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

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

  1. Nullable値型
  2. Null条件演算子
  3. Null合体演算子
  4. nullに備える
← C# Academyに戻る