0Pricing
C# Academy · レッスン

HasValueとValueプロパティ

Nullable値を安全に確認して取得します。

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

2つの主要なプロパティ

すべてのnull許容値には、HasValue(bool)とValue(基になる値)が用意されています。これらを使って安全に状態を確認できます。

using System;

class Program {
    static void Main() {
        int? n = 5;
        Console.WriteLine(n.HasValue);
        Console.WriteLine(n.Value);
    }
}

HasValueで存在を確認する

HasValueは実際の値が存在するときにtrueになり、nullのときにfalseになります。

using System;

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

Valueを安全に読み取る

Valueを読み取る前には必ずHasValueを確認します。nullの状態でValueを読み取ると例外が発生するためです。

using System;

class Program {
    static void Main() {
        int? n = 42;
        if (n.HasValue) {
            Console.WriteLine(n.Value * 2);
        }
    }
}

nullのValueへのアクセスは例外を発生させる

null許容値がnullのときにValueを読み取ると、C#はInvalidOperationExceptionをスローします。確認処理によってこれを防げます。

using System;

class Program {
    static void Main() {
        int? n = null;
        try {
            Console.WriteLine(n.Value);
        } catch (InvalidOperationException) {
            Console.WriteLine("Caught: no value");
        }
    }
}

GetValueOrDefault

GetValueOrDefault()は、値が存在すればその値を返し、存在しなければ型のデフォルト値を返します(intの場合は0、boolの場合はfalse)。

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault());
    }
}

フォールバック付きのGetValueOrDefault

引数を渡すと、独自のフォールバック値を選択できます。GetValueOrDefault(99)はnullの場合に99を返します。

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault(99));
        int? m = 7;
        Console.WriteLine(m.GetValueOrDefault(99));
    }
}

パターン: 確認してから使用する

HasValueとValueを組み合わせると、すっきりした分岐にできる一般的なパターンになります。

using System;

class Program {
    static void Describe(int? score) {
        if (score.HasValue)
            Console.WriteLine("Score is " + score.Value);
        else
            Console.WriteLine("No score yet");
    }
    static void Main() {
        Describe(88);
        Describe(null);
    }
}

暗黙的な変換で元に戻す

null許容値を通常の型に代入するには、まず値が存在することを確認してからValueを読み取ります。

using System;

class Program {
    static void Main() {
        int? maybe = 15;
        if (maybe.HasValue) {
            int real = maybe.Value;
            Console.WriteLine(real + 5);
        }
    }
}

null許容型のデフォルト値

明示的に設定されていないnull許容値のデフォルト値はnullです。そのため、HasValueはfalseになります。

using System;

class Program {
    static void Main() {
        int? n = default;
        Console.WriteLine(n.HasValue);
    }
}

集計での使用

データをループ処理し、HasValueでnullをスキップすると、安全に合計を計算できます。

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5, null, 8 };
        int sum = 0;
        foreach (var r in readings)
            if (r.HasValue) sum += r.Value;
        Console.WriteLine(sum);
    }
}

ループでのGetValueOrDefault

nullを0として扱う場合は、GetValueOrDefaultを使うとコードを簡潔にできます。

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5 };
        int sum = 0;
        foreach (var r in readings)
            sum += r.GetValueOrDefault();
        Console.WriteLine(sum);
    }
}

理解度チェック

null許容型のプロパティについての理解度を確認します。

まとめ

HasValueはnull許容値が値を保持しているかどうかを示し、Valueはその値を取得します。ただし、nullの状態でValueを読み取ると例外が発生します。

GetValueOrDefault()は値またはフォールバック値(型のデフォルト値、あるいは指定した値)を安全に返すため、合計の計算や安全な値の読み取りに適しています。

よくある質問

「HasValueとValueプロパティ」レッスンは無料ですか?

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

「HasValueとValueプロパティ」で何を学びますか?

Nullable値を安全に確認して取得します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「HasValueとValueプロパティ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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