1. ホーム
  2. c#

[解決済み】Nullable型と三項演算子:なぜ`? 10 : null` は禁止されているのですか?[重複)。

2022-04-19 01:55:48

質問

変なエラーに遭遇したんだけど

private bool GetBoolValue()
{
    //Do some logic and return true or false
}

そして、別のメソッドで、次のようなことをします。

int? x = GetBoolValue() ? 10 : null;

単純に、メソッドがtrueを返した場合、Nullableに10を代入します。 int x. そうでない場合は、NULLを nullable intを使用します。しかし、コンパイラは文句を言う。

エラー1 条件式の型が決定できない。 int<null> .

私、おかしくなっちゃったのかな?

解決方法は?

コンパイラは、まず右辺の式を評価しようとします。

GetBoolValue() ? 10 : null

10int リテラル(not int? ) と null は、まあ。 null . この2つの間に暗黙の変換がないため、エラーメッセージが表示されます。

右辺の式を次のいずれかに変更すると、コンパイルされます。 int?null (#1)の間と intint? (#2, #3).

GetBoolValue() ? (int?)10 : null    // #1
GetBoolValue() ? 10 : (int?)null    // #2
GetBoolValue() ? 10 : default(int?) // #3