Nullable値型
int?とNullable構造体を学びます。
「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フィードバックを取得できます。ローカル設定は不要です。