1. ホーム
  2. c#

null条件演算子がnullable型に対応していない?

2023-10-31 08:07:24

質問

私はc#6でコードの一部を書いているのですが、なぜか不思議なことにこれが動作します。

var value = objectThatMayBeNull?.property;

が、これでは

int value = nullableInt?.Value;

うまくいかないというのは、次のようなコンパイルエラーが出るということです。 Cannot resolve symbol 'Value' . なぜ null 条件演算子 ?. が機能しないのか、何か心当たりはありませんか?

どのように解決するのですか?

さて、私はいくつかの思考とテストを行いました。このようなことが起こります。

int value = nullableInt?.Value;

コンパイル時にこのようなエラーメッセージを表示します。

型 'int' は `Value' の定義を含んでいません。

ということは ? を「変換」して int? を実際の int の値に変換します。これは事実上、同じことです。

int value = nullableInt ?? default(int);

結果は整数で、これには Value を持たない、明らかに。

なるほど、これは役に立つかもしれませんね?

int value = nullableInt?;

いいえ、その構文は許可されていません。

では、どうすればいいのでしょうか?ただ .GetValueOrDefault() を使えばいいのです。

int value = nullableInt.GetValueOrDefault();