Programming w/ C# ~ Nullable とジェネリクス

備忘録

C# 8.0 から class 型と class? 型が区別されるようになり Null 安全性が高まったが、ジェネリクスでの Nullable の扱いが難しく、特に C# 8.0 と C# 9.0 以降で大きな違いがあるため、後者のスタイルで記述するときのまとめを備忘として記録する。

制約T として受け入れられる型のパターン
structstruct?classclass?
where T : struct ×××
where T : class ×××
where T : class? ××
where T : notnull××
制約なし
指定不可 ××
指定不可 ×

結論としては C# 8.0 を用いる場合は記述環境が不完全なため「nullable enable にできるものの enable にせずに従来型で記述する」のが望ましく、新規プロジェクトでは C# 9.0 以降を用いて Null 安全に記述するのが望ましい。