如果我有以下界面
type IParameterizable =
abstract member Parameters : unit -> seq<Parameter>
然后我有一些工厂创建 IParameterizable 的各种子类
let MakeA arg = ...
let MakeB arg = ...
let MakeC arg = ...
其中 A、B、C 是 IParameterizable 的子类。现在,如果我想制作一个数组文字
let contents = [| MakeA 0; MakeB 1; MakeC 2 |]
编译器抱怨它们是不同的类型。但是,如果我这样做
let contents = [| MakeA 0 :> IParameterizable
; MakeB 1 :> IParameterizable
; MakeC 2 :> IParameterizable
|]
这行得通,但眼睛有点忙。显而易见的解决方案是让工厂返回 IParameterizable 而不是具体类,但在其他情况下,我需要具体类而不是接口。
有没有办法只指定一次数组的类型,然后所有元素都将被隐式转换,或者如果转换是不可能的,则会出现编译器错误。