跳过潜在的空值(C#)

3
我有这段代码,最终将被序列化为JSON,用于Jquery FullCalender插件。ToUnixTimeSpan方法接受一个DateTime对象并返回自1970年以来的秒数。
DateEnd可能为空。在这段代码中,如果DateEnd为空,我该如何测试它并跳过end = ToUnixTimespan(e.DateEnd)?是否有C#等效的Groovy安全运算符?
var listEvents = from e in eventRepository.GetAllEvents()

                         select new
                         {
                             id = e.EventID,
                             title = e.EventTitle,
                             start = ToUnixTimespan(e.DateStart),

                             end = ToUnixTimespan(e.DateEnd),
                             url = "/Events/Details/" + e.EventID
                         };

关于ToUnixTimespanMethod的更多信息:

private long ToUnixTimespan(DateTime date)
    {
        TimeSpan tspan = date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0));
        return (long)Math.Truncate(tspan.TotalSeconds);
    }
2个回答

6
好的,那么如何呢:
end = e.DateEnd == null ? (long?) null : ToUnixTimespan(e.DateEnd)

很难确定,因为我们不知道ToUnixTimespan返回的类型。


1
@Jon,对于 [end = e.DateEnd ?? ToUnixTimespan(e.DateEnd);] 怎么看? - rebelliard
2
@Rafael E. Belliard,如果e.DateEnd为null,则调用ToUnixTimespan,这几乎与@Doozer1979想要的相反。 - strager
1
哦哦哦,挑战传奇“THE SKEET”! - Barrie Reader
@Rafael:就像strager所说的,而且它假设所需的end类型与e.DateEnd的类型相同,我怀疑并非如此... - Jon Skeet
谢谢大家。Jon使用那行代码会导致以下错误:无法将'System.DateTime?'转换为'System.DateTime'。感谢您的帮助,我对C#还比较新。 - MrBliz
@Dozzer:我认为最后一部分应该是:ToUnixTimespan(e.DateEnd.Value) - James Curran

3

等一下...为什么我要在评论中浪费这个,当我可以利用Jon的工作来获得声望.. ;-)

end = e.DateEnd == null ? (long?) null : ToUnixTimespan(e.DateEnd.Value) 

这应该解决“无法将 'System.DateTime?' 转换为 'System.DateTime'”的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接