Как получить определение универсального типа для типа CRTP

Учитывая следующий тип CRTP в C #:

public abstract class DataProviderBase
    where TProvider : DataProviderBase { }

Как мне получить определение универсального типа в F #?

let typeDef = typedefof>

выдает ошибку:

Несоответствие ограничений типа при применении типа по умолчанию ' DataProviderBase ' для переменной вывода типа. Результирующий тип будет бесконечным при объединении '' a 'и' DataProviderBase '. Рассмотрите возможность добавления дополнительных ограничений типа

В C # это будет:

var typeDef = typeof(DataProviderBase<>);

UPDATE

Я нашел обходной путь:

[]
type DummyProvider() =
  inherit DataProviderBase()

let typeDef = typeof.BaseType.GetGenericTypeDefinition()

Есть ли другой способ сделать это без дополнительного типа?

5
задан Daniel 21 July 2011 в 22:13
поделиться