C#で次のCRTPタイプを指定します。
public abstract class DataProviderBase<TProvider>
where TProvider : DataProviderBase<TProvider> { }
F#でジェネリック型の定義を取得するにはどうすればよいですか?
let typeDef = typedefof<DataProviderBase<_>>
エラーが発生します:
型推論変数にデフォルトの型'DataProviderBase<'a>'を適用すると、型制約が一致しません。''a'と'DataProviderBase<'a>'を統合すると、結果の型は無限になります。さらに型制約を追加することを検討してください。
C#では、次のようになります。
var typeDef = typeof(DataProviderBase<>);
アップデート
回避策を見つけました:
[<AbstractClass>]
type DummyProvider() =
inherit DataProviderBase<DummyProvider>()
let typeDef = typeof<DummyProvider>.BaseType.GetGenericTypeDefinition()
余分なタイプなしでそれを行う別の方法はありますか?