2010-05-28 1 views
6

ich an den Metadaten für System.Web.Configuration.CompilationSection war auf der Suche, und bemerkte das folgende Attribut auf der TimeSpan BatchTimeout Eigenschaft:Warum 10675199.02: 48: 05.4775807 TimeSpan Maximum für CompilationSection?

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

Könnte jemand erklären, warum dies der zulässige Maximalwert ist? TimeSpan selbst hat eine Obergrenze. Warum also gibt es eine weitere Wertvalidierung und warum diese Zahl?

Antwort

7

Das ist genau der Maximalwert von TimeSpan. Zitiert MSDN für TimeSpan.MaxValue:

Der Wert dieses Feldes ist äquivalent zu Int64.MaxValue Zecken. Die Zeichenfolgendarstellung dieses Werts ist positive 10675199.02: 48: 05.4775807.

8

Ich denke, die akzeptierte Antwort beantwortet die Frage nicht vollständig. Es ist tatsächlich der gleiche Maximalwert. Und es ist kein Zufall. Aber warum ist die Definition:

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

und nicht so etwas wie:

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

?

Nun einfach gesagt, weil Attribute die zweite Art von Definitionen nicht zulassen. Sie erlauben nur Kompilierzeitkonstanten, weil sie Metadaten sind, die in die Assembly kompiliert werden.

+2

Um dies zu erweitern, hier ist, wie die beiden definiert sind: 'public static readonly TimeSpan Null = new TimeSpan (0);', 'öffentliche statische readonly TimeSpan MaxValue = neue TimeSpan (Int64.MaxValue);'. Sie sind Instanzen eines Typs, die zur Kompilierzeit nicht verfügbar sind. –

Verwandte Themen