假设我已经定义了通用记录
type GenericType1<'T> = {MyField : 'T}
我希望定义另一种通过此类型参数化的泛型类型。在我的C#鼻子之后,我会写这样的东西:
type GenericType2<'T, GenericType1<'T> > = class end
不幸的是,这不起作用,也不是这样:
type GenericType2<'T, 'S when 'S :> GenericType1<'T> > = class end
因为作为记录的GenericType1被密封,编译器不接受子类型约束。但是,如果GenericType1是类,则上述可以正常工作。
所以,我的问题是:我应该用什么语法来定义GenericType2,它是由记录GenericType1 参数化的?
答案 0 :(得分:1)
正如错误所说,记录是密封的,那么这种子类型约束到底意味着什么呢?您可以在没有其他类型的arg的情况下执行以下操作。
type GenericType2<'T>() =
member val MyRecord = {MyField=Unchecked.defaultof<'T>}
这是否涵盖了您的用例?