F#,Deedle:限制为类型 Frame< obj,obj > 的通用框架

F#, Deedle: Generic Frame constrained to type Frame< obj,obj >

我有一个接收对象并尝试猜测它是字符串、Deedle Frame 还是其他东西的函数:

let exampleF (data : obj) =
    match data with
    | :? string as s -> "string: " + s
    | :? Frame<'a,'b> as d -> "Frame"
    | _ -> "something else"

问题是 Frame<'a,'b> 被限制为类型 Frame< obj,obj >。因此,如果我有 Frame 类型的 someFrame,exampleF 将输出“其他内容”。但是,如果 exampleF 有另一个带有“:? Frame< int,string > as d ->”, someFrame 会被正确捕获。

如何在不指定内部类型的情况下捕获模式匹配中的所有帧?

Jim Foye 帮我找到了答案:

let exampleF data =
    match data.GetType() with
    | typ when typ.IsGenericType && typ.GetGenericTypeDefinition() = typedefof<Frame<_,_>> -> "Frame"
    | typ when typ = typeof<string> -> "string"
    | _ -> "something else"