所以我有这样的代码:函数返回一个函数使用的类型采取了泛型类型参数
type Zero = One = 1 | Two = 2 | Three = 3
type Four = Five = 5 | Six = 6 | Seven = 7
let test_1 (x : bool) : Type =
if x
then typeof<Zero>
else typeof<Four>
let test_2() =
let ty = test_1 true
let e = enum<ty>(1)
...
但是在最后一行,我得到一个错误:Type ty not defined.
有什么建议?
编辑:
或者,也许是这样的:
let test_3 (x : bool) (i : int) : obj =
if x
then enum<Zero>(i) :> obj
else enum<Four>(i) :> obj
我想会有一些方法来恢复类型安全?
也许这样?
let test_4 (x : bool) (i : int) : obj * Type =
if x
then enum<Zero>(i) :> obj, typeof<Zero>
else enum<Four>(i) :> obj, typeof<Four>
然后用它作为这样:
let test_5() =
let v,t = test_4 true 1
let o = v :?> t
...
这抱怨与T中的最后一行没有定义。
基本上我想要做的就是能够返回这些不同的枚举而不诉诸包装零和四个DU。
类型参数必须是静态已知的,它们不能是动态计算的结果。 – kvb
在运行时存在'Type'实例; 'enum'需要一个编译时参数。 – ildjarn