Es gibt gibt Probleme - zuerst müssen Sie das Intervall angeben, das Sie zwischen Elementen der Liste verwenden möchten. Dies wäre ein TimeSpan
, jedoch hat es kein statisches Zero
Mitglied.
wird diese Einschränkung durch die skip range operator erforderlich, die die ‚Stufe‘ Typ statische (+)
und Zero
Mitglieder
definieren Sie Ihre eigene Struktur zu haben erfordert, die jedoch die erforderlichen Operationen unterstützt: Sie
type TimeSpanW = { span : TimeSpan } with
static member (+) (d:DateTime, wrapper) = d + wrapper.span
static member Zero = { span = new TimeSpan(0L) }
kann dann tun:
let ts = new TimeSpan(...)
let dateList = [a .. {span = ts} .. b]
Bearbeiten: Hier ist eine alternative Syntax diskriminiert Gewerkschaften, die Sie bevorzugen:
type Span = Span of TimeSpan with
static member (+) (d:DateTime, Span wrapper) = d + wrapper
static member Zero = Span(new TimeSpan(0L))
let ts = TimeSpan.FromDays(1.0)
let dateList = [a .. Span(ts) .. b]
Funktioniert wunderbar ... Gibt es einen Link, der erklärt, was vor sich geht? Warum ist Zero erforderlich? Auch dieser (+) Operator. –
@KnowsNotMuch - Dies wird vom Operator "Skip Range" benötigt - ich habe die Antwort mit einem Link aktualisiert. – Lee
@KnowsNotMuch - was tatsächlich passiert - der Schritt muss bei 0 beginnen und dann erhöhen - wenn Sie die Signatur betrachten, muss der Schritt nicht den gleichen Typ wie die Endpunkte haben. –