为什么CompilationSection的TimeSpan最大值是10675199.02:48:05.4775807?

10
我查看了System.Web.Configuration.CompilationSection的元数据,并注意到TimeSpan BatchTimeout属性上有以下特性:
[TimeSpanValidator(MinValueString = "00:00:00", 
 MaxValueString = "10675199.02:48:05.4775807")]

能否有人解释一下为什么这是允许的最大值?TimeSpan本身有一个上限,为什么还需要另一个值的验证,以及为什么是这个数字?

2个回答

15

我认为被接受的答案并没有完全回答这个问题。最大值确实相同,这不是巧合。但是为什么会是这样的定义呢:

[TimeSpanValidator(MinValueString = "00:00:00", MaxValueString = "10675199.02:48:05.4775807")]

而不是像这样的:

[TimeSpanValidator(TimeSpan.Zero, TimeSpan.MaxValue)]

简单来说,这是因为属性不允许第二种定义方式。它们只允许编译时常量,因为它们是编译进程序集的元数据。


2
进一步解释一下,这里是它们的定义方式:public static readonly TimeSpan Zero = new TimeSpan(0);public static readonly TimeSpan MaxValue = new TimeSpan(Int64.MaxValue);。它们是类型的实例,在编译时不可用。 - Nelson Rothermel

10

这正是 TimeSpan 的最大值。引用 MSDN 关于 TimeSpan.MaxValue 的说明:

该字段的值等同于 Int64.MaxValue 个滴答数。该值的字符串表示形式为正数 10675199.02:48:05.4775807。


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