[解決済み] C#は値の型をNULLと比較しても問題ない
2023-05-09 10:33:32
質問
今日、この問題に遭遇したのですが、なぜ C# コンパイラがエラーを投げないのか見当もつきません。
Int32 x = 1;
if (x == null)
{
Console.WriteLine("What the?");
}
xがNULLになる可能性があるのか、混乱しています。特に、この代入は間違いなくコンパイラーエラーを投げるので。
Int32 x = null;
x が null になる可能性はありますか。マイクロソフトがこのチェックをコンパイラに入れないことにしたのでしょうか、それとも完全に見逃してしまったのでしょうか。
更新: この記事を書くためにコードをいじった後、突然、コンパイラは式が決して真にならないという警告を表示するようになりました。今、私は本当に迷っています。私はオブジェクトをクラスに入れ、今では警告はなくなりましたが、値型が null で終わることができるのかという疑問が残りました。
public class Test
{
public DateTime ADate = DateTime.Now;
public Test ()
{
Test test = new Test();
if (test.ADate == null)
{
Console.WriteLine("What the?");
}
}
}
どのように解決するのですか?
演算子のオーバーロード解決には、選択すべき最適な演算子が一意であるため、これは合法です。2 つの nullable int を取る == 演算子があります。int ローカルは null 可能な int に変換されます。null リテラルは nullable int に変換可能です。したがって、これは == 演算子の合法的な使用法であり、常に false という結果になります。
同様に、"if (x == 12.6)" と言うことも許可されており、これも常に false になります。int ローカルは double に変換可能で、リテラルは double に変換可能で、明らかにこれらは決して等しくはなりません。
関連
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] nullはなぜオブジェクトなのか、nullとundefinedの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である