[解決済み] Nullable<int>のインクリメントはなぜ例外を投げないのですか?
2023-02-16 18:19:32
質問
Console.WriteLineが空の行を書き込むのはなぜか、説明してください。
Console.WriteLine(null)
は私にコンパイルエラーを与えます)、なぜNullReferenceExceptionがないのか(さらに
a+=1
はそれを発生させないはずです)?
int? a = null;
a++; // Why there is not NullReferenceException?
Console.WriteLine(a); // Empty line
どのように解決するのですか?
の効果を観察しているのですね。 持ち上げられた演算子 .
C# 5仕様の7.3.7項より。
持ち上げられた演算子は、非ヌル値の型を操作する定義済みおよびユーザー定義の演算子が、それらの型のヌル可能な形式でも使用できるようにします。持ち上げられた演算子は、以下に説明するように、特定の要件を満たす定義済み演算子およびユーザー定義演算子から構築されます。
- 単項演算子については
+ ++ - -- ! ~
の場合、オペランドと結果の型が共に非ヌルであれば、演算子のリフトされた形式が存在します。リフトされた形式は、単一の?
修飾子を追加することで構築されます。リフトされた演算子は、オペランドがNULLの場合、NULL値を生成する。それ以外の場合は、オペランドのラップを解除し、基礎となる演算子を適用し、結果をラップします。
つまり、基本的には
a++
という結果を持つ式です。
null
(として
int?
のように)、変数はそのままになります。
を呼び出すと
Console.WriteLine(a);
に囲まれている
object
で、NULL参照に変換され、空行として出力されます。
関連
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] 配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しない
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Visual Studioの出力ウィンドウに書き込む
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み】文字列をパースしてNULL可能なint型にする方法
-
[解決済み】.NETのforeachループでコレクションがNULLの場合、NullRefExceptionが投げられるのはなぜですか?
-
[解決済み】'int'と<null>の間に暗黙の変換がないため、条件式の型が決定できない
-
[解決済み】IEnumerable vs List - What to Use? どのように動作するのでしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
解決済み] 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つしか使用できない?
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない