我正在尝试将对象转换为类似的通用接口 此
type IFetchData<'a> =
abstract FetchData: string -> seq<'a>
我的示例用法在FSI中如下所示:
let sample = new Sample()
let box_sample = box(sample) //simulate reflection type that implements interface
let result = unbox<IFetchData<_>>(box_sample) //value restriction
let result2: IFetchData<_> = unbox<IFetchData<_>>(box_sample) //value restriction
我正在尝试实现类型成员FetchData的动态调用。 所以一旦我收到类型IFetchData&lt; _&gt;那么我想调用FetchData成员而不需要知道泛型类型究竟是什么。
我得到的错误是值限制错误。 任何帮助将不胜感激。
感谢。
答案 0 :(得分:2)
你不能只是坐在旁边的通用术语 - 但如果编译器可以推断出具体的类型你就可以了。或者,如错误消息所示,您可以转换为如下函数:
let result() = unbox<IFetchData<_>>(box_sample)
否则,您需要一个具体类型的结果,如
let result2 = unbox<IFetchData<char>>(box_sample)
虽然,在这里你需要事先了解你要拆箱的内容
或者,如果代码可以稍后根据您的用法推断出具体类型,那么您将没事。