我想把我的timespan
加起来。我的逻辑工作得很好,他唯一的问题是如果值是NULL
那么我的应用程序就会中断。我想通过" 00:00:00"如果值为NULL
,则为我的时间跨度。我的以下代码无效:
@Model.Sum(x=> TimeSpan.Parse(x.Time ?? "00:00:00").Minutes)
X.Time
是string
,我的逻辑可能是NULL
。如果是NULL
,我想用00:00:00替换它
我做错了什么?
答案 0 :(得分:2)
我想你想要总计分钟数,所以你只需要检查空值并在总数中加0:
@Model.Sum(x=> !string.IsNullOrEmpty(x.Time) ? TimeSpan.Parse(x.Time).TotalMinutes : 0)
答案 1 :(得分:1)
除了检查所有值是否为空之外,您可以先过滤,以便只有空值。
@Model.Where(x => !string.IsNullOrEmpty(x.Time)).Sum(x=> TimeSpan.Parse(x.Time).Minutes)
答案 2 :(得分:1)
TimeSpan.Parse
方法expects a parameter in the form
[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]
因为00:00:00
是一个有效的输入字符串,所以我在这里猜测它并不是null
值,而是在x.Time
设置时发生错误通过DateTime.Now.ToString()
等,因为在那些情况下你得到了
System.FormatException:'字符串未被识别为有效的TimeSpan。'
Time
null
您的代码完全正常。请确保其他值有效。
答案 3 :(得分:1)
您的问题的问题在于,根据您的说法,代码应该有效。例如,以下代码可以正常工作:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
class Test
{
public string Time;
}
class Program
{
static void Main()
{
var Model = new List<Test>
{
new Test{Time = "01:01:01"},
// null, // Uncomment this line to make it crash.
new Test{Time = null},
new Test{Time = "02:02:02"}
};
int result = Model.Sum(x => TimeSpan.Parse(x.Time ?? "00:00:00").Minutes);
Console.WriteLine(result);
}
}
}
由于您说错误正在发生,因此必然会出现其他问题。我认为问题是x
本身是空的。
我们可以通过取消注释指示的行来证明这种可能性。如果你这样做,程序将崩溃。
如果这确实是问题,那么解决方案非常简单;只需将总和更改为:
int result = Model.Sum(x => TimeSpan.Parse(x?.Time ?? "00:00:00").Minutes);
进行更改后,空x
不会使其崩溃。
请注意,写一下可能稍微好一点:
int result = Model.Sum(x => x?.Time != null ? TimeSpan.Parse(x.Time).Minutes : 0 );
因为那样你就不会解析"00:00:00"
只返回零(通过.Minutes
),但如果有的话,差异很可能很小。
答案 4 :(得分:0)
由于x
为null
,您将获得空例外。因此,当您调用属性x.Time
时,它将抛出NullReferenceException
。您可以使用三元运算符检查x
是否为null
@Model.Sum(x => TimeSpan.Parse(x == null ? "00:00:00" : x.Time).Minutes)
答案 5 :(得分:0)
尝试这个
时间跨度?变量=(TimeSpan?)为空。
此值返回空值。