我有以下代码:
var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateAnalyzed_Copper = records.DateAnalyzed_Copper.HasValue ? TimeZoneInfo.ConvertTimeToUtc(records.DateAnalyzed_Copper.Value, tz) : null,
...
请注意,DateAnalyzed_Copper是可以为空的DateTime。
我收到以下消息
Type of conditional expression cannot be determined because there is no implicit conversion between 'System.DateTime' and '<null>'
答案 0 :(得分:1)
您应该将null
强制转换为可以为空的DateTime:
DateAnalyzed_Copper = records.DateAnalyzed_Copper.HasValue ?
TimeZoneInfo.ConvertTimeToUtc(records.DateAnalyzed_Copper.Value, tz)
: (DateTime?)null
DateTime
返回的ConvertTimeToUtc
值:
DateAnalyzed_Copper = records.DateAnalyzed_Copper.HasValue ?
(DateTime?)TimeZoneInfo.ConvertTimeToUtc(records.DateAnalyzed_Copper.Value, tz)
: null
三元运算符在两个分支上都需要相同的类型,或者它们之间应该存在隐式转换。您有不同的类型,DateTime
和null
之间没有隐式转换。所以,你应该使用明确的一个。
答案 1 :(得分:0)
错误表明null
的显式值不是有效的DateTime
值;您可以通过以下方式将null转换为DateTime
:
(DateTime?)null
或使用C#的default()
:
default(DateTime)
示例:
DateAnalyzed_Copper = records.DateAnalyzed_Copper.HasValue ?
TimeZoneInfo.ConvertTimeToUtc(records.DateAnalyzed_Copper.Value, tz) :
default(DateTime);
或者,虽然我不是这种方法的粉丝,但您可以在首次创建时将DateAnalyzedCopper
变量声明为可空:
DateTime? DateAnalyzedCopper;