据我所知,静态成员约束(如
Seq.sum
)无法发现由类型扩展(本质上是扩展方法)添加的成员,因此我认为没有直接的方法可以做到这一点。
我能想到的最好的选择是在
System.TimeSpan
结构。然后可以定义所有必需的成员。代码如下所示:
[<Struct>]
type TimeSpan(ts:System.TimeSpan) =
member x.TimeSpan = ts
new(ticks:int64) = TimeSpan(System.TimeSpan(ticks))
static member Zero = TimeSpan(System.TimeSpan.Zero)
static member (+) (a:TimeSpan, b:TimeSpan) =
TimeSpan(a.TimeSpan + b.TimeSpan)
static member DivideByInt (n:TimeSpan, d:int) =
TimeSpan(n.TimeSpan.Ticks / (int64 d))
let ts = [ TimeSpan(10L); TimeSpan(99L) ]
let sum = ts |> Seq.sum
let avg = ts |> Seq.average
我打电话给他
TimeSpan
,所以它隐藏了标准
类型。不过,你还是要写
ts.TimeSpan
当您需要访问底层系统类型时,这并不是很好。