f#泛型类型比较

Phi*_*own 6 generics f# types

我试图弄清楚从通话中返回的obj是否属于某种类型.这是我的代码:

type MyType<'T>= 
    val mutable myArr : array
    val mutable id : int
    val mutable value : 'T
Run Code Online (Sandbox Code Playgroud)

并且在某些方法中,MyType在范围内......

let a  = someFunThatReturnsObj()   // a could be of type MyType 
Run Code Online (Sandbox Code Playgroud)

如何确定a是否为MyType类型?

Bri*_*ian 6

match a with
| :? MyType<int> as mt -> // it's a MyType<int>, use 'mt'
| _ -> // it's not
Run Code Online (Sandbox Code Playgroud)

如果你只关心MyType<X>一些未知的X,那么

let t = a.GetType()
if t.IsGenericType && t.GetGenericTypeDefinition() = typedefof<MyType<int>> then
    // it is
Run Code Online (Sandbox Code Playgroud)

  • 调用`box`函数,将其参数向上转换为`obj`. (2认同)