I am new to F #, so I probably missed something trivial, but here.
It works -
let monthsWith31Days = [| MonthType.January; MonthType.March; MonthType.May; MonthType.July; MonthType.December |]
But it is not
let monthsWith31Days = [| MonthType.January; MonthType.March; MonthType.May; MonthType.July; MonthType.August; MonthType.December |]
I noted that this is not the content itself, but the number of elements that matter (even if I change the actual elements used). The problem begins when the number of elements exceeds 5.
This is the error I get when I run NUnit tests -
System.ArgumentException: value is not in the expected range.
Any ideas what I am missing?
Edit:
Definition of the whole type (two types are connected so that both are shown here) -
type public Month(monthType:MonthType, year:Year) = member public this.Year with get () = year member public this.MonthType with get () = monthType member public this.GetDaysCount () = let monthsWith31Days = [| MonthType.January; MonthType.March; MonthType.May; MonthType.July; MonthType.August; MonthType.December |] let has31 = monthsWith31Days |> Array.filter(fun n -> (int)n = (int)this.monthType) |> Array.length if (has31 > 0) then 31 // else if (this.MonthType = MonthType.February) // then (if this.Year.Leap then 29 // else 28) else 30 and public Year(ad:int) = member public this.AD with get() = ad member public this.Months = Enum.GetValues(typeof<MonthType>).Cast().ToArray() |> Array.map(fun n -> new Month (n, this)) member public this.GetMonth (index:int) = (this.Months |> Array.filter(fun p-> (int)p.MonthType = index)).First() member public this.GetMonth (monthName:string) = let requiredMonthType = Enum.Parse(typeof<MonthType>, monthName) |> unbox<MonthType> (this.Months |> Array.filter(fun p-> p.MonthType = requiredMonthType)).First() member public this.Leap = if this.AD % 400 = 0 then true else if this.AD % 100 = 0 then false else if this.AD % 4 = 0 then true else false member this.DaysCount = if this.Leap then 366 else 365
source share