0

私はこのコードを持っています:

private MyClass CreateObject(MyOtherClass myOtherClass)
{
    return new MyClass
    {
        Name = myOtherClass.Name,
        ValidationDate = (DateTime)myOtherClass.ValidationDate  //ValidationDate is nullable
    };
}

これを行うと、コンパイル エラーが発生します。

'<null>'と の間に暗黙的な変換がないため、条件式の型を判別できません。'System.DateTime'

private MyClass CreateObject(MyOtherClass myOtherClass)
{
    return new MyClass
    {
        Name = myOtherClass.Name,
        ValidationDate = (myOtherClass.VALIDATION_DATE == null) ? null : DateTime.Now  //ValidationDate is nullable
    };
}

私がこれをすれば、問題ありません:

MyClass myClass = new MyClass();
if (myClass.ValidationDate == null)
    myClass.ValidationDate = null;

問題はなぜですか?とソリューション?:)

4

4 に答える 4

3

最初のコード ブロックの問題は、null 許容の DateTime 値を DateTime にキャストしようとしていることです。

DateTime?代わりに、null 可能な DateTime ( ) にキャストしてみてください。

ValidationDate = (DateTime?)myOtherClass.ValidationDate

結局、null 可能な DateTime フィールドにデータを入力しようとしているからです。

nullの場合にデフォルト値を提供しようとしている場合myOtherClass.ValidationDateは、合体演算子を使用します (キャストは不要です)。

ValidationDate = myOtherClass.ValidationDate ?? DateTime.Now
于 2012-04-19T09:06:51.577 に答える
0

nullを a にキャストしDateTime?ます。

ValidationDate = (myOtherClass.VALIDATION_DATE == null) ? 
                                                  (DateTime?)null : DateTime.Now;

条件演算子では、2 つの結果分岐が同じ型、または暗黙的に変換可能な型である必要があります。

それnull自体はどのタイプにも対応しないため、そのブランチをキャストする必要があります。上記は、ブランチDateTimeとブランチの間で暗黙的な変換があるため機能します。DateTime?DateTime.Now

于 2012-04-19T09:07:55.437 に答える
0

null 合体演算子は、実際??にはコードのどこにも表示されません。使用したのは三項演算子です。それが機能するためには、2 つの可能な結果 (この場合はnullDateTime.Now) が同じ型に変換可能である必要があると思います (そうではありません)。

行を次のように単純に変更してみてください。

ValidationDate = myOtherClass.VALIDATION_DATE ?? DateTime.Now;
于 2012-04-19T09:09:17.263 に答える
0

MyOtherClass の ValidationDate が null 許容の DateTime で、MyClass の ValidationDate が DateTime (null 不可) の場合、次のようにできます。

ValidationDate = myOtherClass.ValidationDate?? DateTime.Now
于 2012-04-19T09:09:30.497 に答える