C#のヌル可能参照型はどのように機能しますか?
C# 8.0 の主要な機能のひとつは、ヌル許容参照型という概念であり、これはプログラマーがヌルデータを扱う方法において大きな変化をもたらします。それらがどのように機能するのか、そしてどのように使用するのかについて議論します。
ヌル許容参照型とは何ですか?
C# には主に2種類の変数があります。値型は固定サイズを持っています。
int,
float、そして
bool
それらは値として関数間で渡され、通常スタックに格納されます――スコープを超えると自動的にクリアされる非常に高速なメモリです。それらは決してnullにはなりませんが、使用することによって
Nullable<T>構造体は、その動作を望むのであれば、値型がnullデータをサポートするように作成できます。
もう一つの型は参照型で、文字列やリストのように固定サイズのない大きなオブジェクトです。これらはほとんど常にヒープに保存され、スタック上の変数はメモリ位置への参照となります。
問題は、参照型がnullにすることができるということです。位置を格納する変数はnull値に設定でき、これは特にウェブフォームのオプショナル質問など、そこに存在することが保証されていないデータを扱う場合に非常に一般的です。これが、.NETがガーベッジコレクタを必要とする理由です。アクティブな参照を持たないオブジェクトをクリーンアップするために。
もしあなたが.NETプログラマーであれば、あなたは間違いなくnullチェックに慣れているでしょう。これは、何かがnullになっているかどうかを使用する前に手動で確認することです。これはうまく機能していて、非常に安価な操作ですが、多くの場合、不要です。参照型がnullになるためには、適切な値で初期化されていないか、手動で値をnullに設定されている必要があります。
null例えば、
variable = null;ヌル許容参照型は、基本的にヌルになり得る参照変数とヌルにならない参照変数の違いを強制する新しい追加機能です。これは破壊的な機能であり、おそらくあなたのコードベースには多くの警告が残るでしょうので、手動で有効にしなければならないものです。有効にすると、コンパイラーは次のような違いを認識し始めます:
string?はnullになる可能性があり、以前のバージョンからの「デフォルト」動作を保持します、そしてstringはnullであってはいけません。デフォルト値が与えられなければならないため、nullに設定されることは決してありません。
この機能が有効になっていると、参照型は値型とほぼ同じように機能し、Type?構文を使ってコンパイラに指定しない限り、決してnullになりません。技術的には、「nullable参照型」はC#が昔から持っていたものであり、新しい機能は古いものを置き換える非nullable参照型です。
このシンプルな機能は、変数の意図をコンパイラに知らせることを可能にします。nullableなstring?値をnon-nullableなstring変数に割り当てようとすると、nullを適切に処理していないという警告が表示されます。
この警告を修正するには、値がnullでないことを確認した後にのみ、非null値を設定する必要があります。コンパイラは賢く、値がどこでnullになる可能性があるかを認識しています。if (value != null)ブロックで囲むと、警告は表示されず、使用するときにそれがnullでないことを思い出させてくれます。
Nullableな値型とは異なり、nullableな参照型は自動的にその非nullableな同等物に変換されますが、警告が表示されます。
nullableリファレンスタイプは、ローカル変数、クラスや構造体のフィールドやプロパティ、関数の入力パラメータなど、通常の型を使用できる場所のどこでも使用できます。チェックせずにそれらを非nullに変換しようとすると、エラーが発生します。
ヌラブルコンテキストをオンにする方法
ソリューションエクスプローラーから、プロジェクトを右クリックし、「プロジェクトファイルを編集」を選択します。このオプションを表示するには、最初にプロジェクトをアンロードする必要があるかもしれません。
<Nullable>enable</Nullable>レガシープロジェクト形式を使用している場合は、各ファイルの先頭に指示を手動で上書きする必要があるかもしれません。
#nullable enable警告を表示したくない場合は、「アノテーション」コンテキストを使用できます。このコンテキストでは、ホバーしたときにのみアノテーションが表示されます。




