这根本不是关于Windows窗体的信息,它只在这里用于“背景”。
当我在AddRange
的MenuStrip.Items
上出错并需要将ToolStripMenuItem
转换为ToolStripItem
时,我正在玩Windows窗体
但是我已经有一个AddRange
的Form.Controls
,在此之前不需要强制转换。
经过一些试验,我设法发现该AddRange
有多个重载时发生了错误,因此我尝试验证我的想法:
type Foo () = class end
type Bar () = inherit Foo ()
type FooCollection () = class end // not really necessary
type Test1 () =
member __.AddRange (col: FooCollection) = () // could be an int or anything instead
member __.AddRange (foos: Foo []) = ()
type Test2 () = member __.AddRange (foos: Foo []) = ()
let lst1, lst2 = Test1 (), Test2 ()
lst1.AddRange [|Bar ()|] // error: have to explicitely cast => [|Bar () :> Foo|]
lst2.AddRange [|Bar ()|] // works
问题就是为什么;从我的角度来看,通话并不am昧
最佳答案
阅读14.4.3 F# spec之后(由Gustavo提示,对他表示敬意)
我知道永远不会为具有重载的方法插入灵活性,因为它需要进行参数检查才能选择。
关于casting - 当有不同的过载时强制上调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38244478/