1. ホーム
  2. c#

[解決済み] ?:条件演算子でNullable型になる問題

2022-04-25 07:52:54

質問

C#.NET 2.0でなぜこれが動作するのか、どなたか説明してください。

    Nullable<DateTime> foo;
    if (true)
        foo = null;
    else
        foo = new DateTime(0);

...が、これはそうではない。

    Nullable<DateTime> foo;
    foo = true ? null : new DateTime(0);

後者の形式では、コンパイルエラー "「'<null>'と 'System.DateTime' の間に暗黙の変換がないため、条件式の型が決定できません."」が発生します。

前者が使えないわけではありませんが、2番目のスタイルの方が私のコードの他の部分と一貫性があります。

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

コンパイラは、「どのように変換すればいいのかわからない」と言っているのです。 null にしています。 DateTime .

解決策は簡単です。

DateTime? foo;
foo = true ? (DateTime?)null : new DateTime(0);

なお Nullable<DateTime> という書き方ができる DateTime? を使えば、入力の手間が省けます。