我有一个在F#中具有显式泛型参数的基类。我试图检查我使用的给定类型是否实现了特定的接口。我想:“如果OB:ISysAware然后”基于信息从类型此运行胁迫或型式试验“一到ISysAware涉及一个不确定的类型:会做,但抱怨总是相同的:F中泛型类型的运行时强制#
let (|SysAware|_|) t =
match t with
| :? ISysAware as p -> Some(p)
| _ -> None
错误FS0008在此节目点之前。某些类型不允许运行时类型测试。需要进一步的类型注释。
显然,我不想在这里使用反射。 IsAssignableFrom会付出高昂的代价。
想法?
有趣的,但我确实有'a:不是结构和'a:null作为约束。 – hammett 2012-01-26 23:30:48