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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Nullable値型の基本
- HasValueとValueプロパティ
- Null合体演算子
- 計算におけるNullable