1

なぜこれが機能するのか、誰にも分かりますか:

if (_item.Created == DateTime.MinValue)
{
  ListSqlParam.Add(new SqlParameter("@TransactionCreated", DBNull.Value));
}
else
{
  ListSqlParam.Add(new SqlParameter("@TransactionCreated", _item.Created));
}

しかし、これではありません:

ListSqlParam.Add(new SqlParameter("@TransactionCreated",((_item.Created == DateTime.MinValue) ? DBNull.Value : _item.Created)));
4

3 に答える 3

3

その理由は、条件演算子が特定の型の式であるためです。この特定の型は、演算子の 2 つのブランチの式の型に基づいて、コンパイラによって推測されます。
あなたのコードでは、この特定の型はコンパイラによって推測できませDBNull.Value_item.Created。どちらか一方を他方の型にキャストすることはできません。

動作させるには、少なくとも 1 つのブランチを次のようにキャストしobjectます。

(_item.Created == DateTime.MinValue) ? (object)DBNull.Value : _item.Created
于 2012-12-03T12:35:18.320 に答える
0

代わりにSqlDateTimeを使用してください:

_item.Created == DateTime.MinValue ? SqlDateTime.Null : new SqlDateTime(_item.Created)
于 2012-12-03T12:40:06.810 に答える
0

条件演算子を使用する場合、条件の異なる側 (true 分岐と false 分岐) によって返される両方の型が同じであるか、相互に暗黙的に変換可能である必要があります。

DBNull.ValueでありDateTime、そのような値ではありません。

于 2012-12-03T12:34:40.383 に答える