gpt4 book ai didi

c# - 检查添加的 TimeSpans 是否超过 TimeSpan.MaxValue

转载 作者:行者123 更新时间:2023-11-30 15:57:16 25 4
gpt4 key购买 nike

我正在尝试将一些 TimeSpans 加在一起进行一些计算。
例如:

var timeSpan1 = new TimeSpan.FromMinutes(1);
var timeSpan2 = new TimeSpan.MaxValue;
var timeSpan3 = timeSpan1 + timeSpan2;

在这种情况下,它将超过 TimeSpan.MaxValue 并抛出异常

System.OverflowException : TimeSpan overflowed because the duration is too long.

添加 TimeSpans 的正确方法是什么?

我是否必须围绕它放置一个 try-catch 或编写我自己的扩展方法?看起来这应该是 .Net 框架的一部分——要么默认为 MaxValue,要么有一个 TryAdd 方法。

最佳答案

我会使用代数,并将所有内容保存在 TimeSpan 单位中:

public static TimeSpan AddTimeSpan(this TimeSpan ts1, TimeSpan ts2)
{
bool sign1 = ts1 < TimeSpan.Zero, sign2 = ts2 < TimeSpan.Zero;

if (sign1 && sign2)
{
if (TimeSpan.MinValue - ts1 > ts2)
{
return TimeSpan.MinValue;
}
}
else if (!sign1 && !sign2)
{
if (TimeSpan.MaxValue - ts1 < ts2)
{
return TimeSpan.MaxValue;
}
}

return ts1 + ts2;
}

这样一来,您可以利用 TimeSpan 而无需将其转换为其他单位,并且您可以放心,不管转换过程中可能出现的其他潜在陷阱(我认为这是可以安全地假设 TimeSpan 范围不会改变,以至于 TotalMinutes 不再足够,但是当您接近 TimeSpan.MinValueTimeSpan.MaxValue 的限制。

关于c# - 检查添加的 TimeSpans 是否超过 TimeSpan.MaxValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com