C#はnullを保持できる型とそうでない型を区別します。nullable値型()により値型がnullを保持できるようになり、(コンパイラ機能)はnullバグをキャッチするのに役立ち、(、、)により、nullである可能性のある値の処理がクリーンで安全になります。これは広く存在するnull参照問題に対応しています。
int??.??!int x = 5; // a value type — CANNOT be null
int? y = null; // int? = Nullable<int> — CAN be null
if (y.HasValue) { int val = y.Value; } // check + access
int z = y ?? 0; // default if null
値型は通常nullを保持できませんが、int?(Nullable<int>)で可能になります。これはオプション/欠落データに一般的です(例:nullableなデータベースカラム)。
#nullable enable // (on by default in modern projects)
string name = null; // ⚠️ warning — string is non-nullable by default now
string? maybe = null; // ✅ string? explicitly allows null
void Use(string? s) {
Console.WriteLine(s.Length); // ⚠️ warning — s might be null (must check first)
}
nullable参照型を有効にすると、コンパイラはnullである可能性がある参照(string?)とそうでない参照(string)を追跡し、null参照外しの危険性があるときに警告を出します。これによりNullReferenceExceptionバグをコンパイル時にキャッチできます。これはモダンなC#の主要な安全性機能です。
// ?. null-conditional — short-circuits to null instead of throwing
int? len = user?.Name?.Length; // null if user or Name is null (no exception)
user?.DoSomething(); // only calls if user isn't null
// ?? null-coalescing — provide a default
string name = input ?? "Anonymous";
name ??= "fallback"; // assign if currently null
// ! null-forgiving — assert non-null (suppress the warning; use carefully)
string definitelyNotNull = maybe!; // "I know it's not null" — no runtime check
**null条件演算子(?.)はnullである可能性のある値のメンバーに安全にアクセスし(例外をスローする代わりにnullを返す)、??**はデフォルト値を提供します。これらを組み合わせるとnull処理がクリーンで安全になります。
Null処理はロバストなC#を書くための最も重要な側面の1つです。なぜなら**NullReferenceException**(「10億ドルの誤り」)は最も一般的なランタイムエラーの1つだからです。C#のnullable型と演算子はこれに直接対応し、本質的な知識となっています。Nullable値型(int?)はオプション/欠落データ(nullableなデータベースフィールド、オプション値)を表すのに実質的に必要です。
Nullable参照型機能(モダンな.NETプロジェクトではデフォルトで有効)は大きな安全性改善です。コンパイラが可能なnull参照外しを追跡して警告することで、null関連のバグ全体をランタイムクラッシュではなくコンパイル時にキャッチできます。これは大きな信頼性向上です。
Null処理演算子は日々のツールで、nullである可能性のある値の処理をクリーンで安全にします。**null条件演算子(?.)は安全にnullである可能性のあるチェーンをナビゲートし(例外をスローする代わりにnullを返す)、??/??=**は簡潔にデフォルト値を提供し、!は非null値を主張します(注意深く使用する必要があります)。
Nullable値型、nullable参照型の安全性機能、およびnull処理演算子(?.、??、!)を理解することは、広く存在するNullReferenceExceptionを避ける、null安全でロバストなC#を書くために重要です。これは頻繁で実質的に重要な懸念事項です。
Null関連のバグが非常に一般的であり、C#が強力なツール(特にコンパイル時nullチェック)を提供しているため、nullable型とnull演算子をマスターすることは、信頼性のあるモダンなC#を書くための基礎的で必須の知識です。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する