如何在 sum() 方法中处理 "Nullable value type may be null" (对于 TimeSpan)?

How to handle "Nullable value type may be null" (for TimeSpan) inside the sum() methode?

在我的 Asp.net 核心项目中,我需要检查空 TimeSpan 属性。 这是我的方法:

 return result.Include(e => e.Episodes).AsEnumerable().Select(c => new ShowListCoursesViewModel()
            {
                CourseId = c.CourseId,
                CourseImageName = c.CourseImageName,
                CoursePrice = Convert.ToDecimal(c.CoursePrice),
                CourseTitle = c.CopurseTitle,
                CourseTotalTime = new TimeSpan(c.Episodes.Sum(t => t.EpisodeTimeLength.Value.Ticks) )
            }).Skip(skip).Take(take).OrderByDescending(d => d.CoursePrice).ToList();

它在 t.EpisodeTimeLength 下方显示一个绿色的波浪线,上面写着:

Nullable value type may be null.

我的 CourseTotalTime 属性 可以为空,而且 EpisodeTimeLength 也可以为空。

如何将 EpisodeTimeLengthnull 值解释为 Sum 中的 00:00:00?示例:[null, 01:00:00, 01:00:00] 应该在 CourseTotaltime.

中产生 02:00:00

您可以在 Sum:

之前使用 Where 排除 null
CourseTotalTime = new TimeSpan(
    c.Episodes
        .Where(t => t.EpisodeTimeLength.HasValue)
        .Sum(t => t.EpisodeTimeLength.Value.Ticks))

或者,您可以指定在 t.EpisodeTimeLengthnull 时使用的默认值:

CourseTotalTime = new TimeSpan(
    c.Episodes
        .Sum(t => (t.EpisodeTimeLength ?? TimeSpan.Zero).Ticks))

这利用了 null-coalescing operator

Demonstration of both approaches