Reflection 如何获取CRTP类型的泛型类型定义

Reflection 如何获取CRTP类型的泛型类型定义,reflection,f#,crtp,Reflection,F#,Crtp,给定C#中的以下类型: 公共抽象类DataProviderBase 其中TProvider:DataProviderBase{} 如何在F#中获得其泛型类型定义 让typeDef=typedefof 产生以下错误: 应用默认类型“DataProviderBase时类型约束不匹配我认为这实际上是一个很好的问题。我没有找到更好的解决办法。 使用typedefof可以稍微简化您的工作环境,如下所示: let typeDef = typedefof<DataProviderBase<Du

给定C#中的以下类型:

公共抽象类DataProviderBase
其中TProvider:DataProviderBase{}
如何在F#中获得其泛型类型定义

让typeDef=typedefof
产生以下错误:


应用默认类型“DataProviderBase时类型约束不匹配我认为这实际上是一个很好的问题。我没有找到更好的解决办法。 使用
typedefof
可以稍微简化您的工作环境,如下所示:

let typeDef = typedefof<DataProviderBase<DummyProvider>>
让typeDef=typedefof
技术细节


问题是F#的
typedefofan不知道为什么F#团队选择将
typeof
/
typedefof
作为函数实现?“我喜欢你对解决方法的简化。”丹尼尔-我没有权威的答案,但我猜他们这样做是因为他们可以。
typeof
函数使用一些内联IL,另一个非常简单:。它的工作方式几乎类似于C的操作符(你的例子是我知道的第一个关于它失败的地方),但是不需要新的语法。@托马斯,丹尼尔-其他约束也有问题:考虑<代码>类型T-()=类结束< /代码>,它有相同的问题。它应该作为bug提交吗?@Daniel-几年前我发了一份bug报告。。。我会重新考虑这个问题。
let typeDef = typedefof<DataProviderBase<_>>
var typeDef = typeof(DataProviderBase<>);
[<AbstractClass>]
type DummyProvider() =
  inherit DataProviderBase<DummyProvider>()

let typeDef = typeof<DummyProvider>.BaseType.GetGenericTypeDefinition()
let typeDef = typedefof<DataProviderBase<DummyProvider>>