You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TimeSpan求和遇Null值时,如何传入"00:00:00"避免程序崩溃?

解决TimeSpan求和时遇到Null/无效格式崩溃的问题

嘿,我来帮你捋清楚问题出在哪,再给你几个实用的解决方案~

为什么你的代码会崩溃?

你原来的代码@Model.Sum(x=> TimeSpan.Parse(x.Time ?? "00:00:00").Minutes)有两个潜在的坑:

  1. ??只处理null,不处理空字符串:如果x.Time是空字符串""(而不是null),??运算符不会生效,TimeSpan.Parse("")会直接抛出FormatException导致崩溃。
  2. 未处理无效格式的字符串:如果x.Time是其他不符合TimeSpan格式的字符串(比如"abc"、"123"),TimeSpan.Parse同样会抛出异常。

靠谱的解决方案

方案1:在Sum里直接用安全解析(适合快速实现)

用TimeSpan.TryParse替代Parse,同时处理null、空字符串和无效格式的情况:

@Model.Sum(x => 
{
    // 先处理x本身为null的情况(如果Model里可能存在null元素)
    if (x == null || string.IsNullOrEmpty(x.Time))
    {
        return 0; // 对应00:00:00的分钟数
    }
    // 安全解析,失败就返回0
    return TimeSpan.TryParse(x.Time, out var timeSpan) ? timeSpan.Minutes : 0;
})

⚠️ 注意:如果你需要的是总时长的分钟数(比如1小时30分钟算90分钟,而不是仅取分钟部分的30),请把timeSpan.Minutes换成timeSpan.TotalMinutes,记得根据需求转成合适的数值类型(比如(int)timeSpan.TotalMinutes)。

方案2:封装扩展方法(更优雅,复用性强)

如果这个场景在项目里多次出现,建议在后台写一个扩展方法:

// 新建一个静态类,比如StringExtensions.cs
public static class StringExtensions
{
    public static TimeSpan ToSafeTimeSpan(this string timeString)
    {
        // 处理null、空字符串,以及解析失败的情况,默认返回00:00:00
        if (string.IsNullOrEmpty(timeString) || !TimeSpan.TryParse(timeString, out var result))
        {
            return TimeSpan.Zero;
        }
        return result;
    }
}

然后在视图里就可以简化成:

@Model.Sum(x => x?.Time.ToSafeTimeSpan().Minutes ?? 0)

这样代码更整洁,也方便后续复用。

额外提醒

如果你的Model集合里可能存在null元素(比如IEnumerable<YourType>里有null项),一定要先判断x != null,或者提前过滤掉null元素:

@Model.Where(x => x != null).Sum(x => x.Time.ToSafeTimeSpan().Minutes)

内容的提问来源于stack exchange,提问作者Syed Safeer Ul Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:48:43