这根本不是关于Windows窗体的信息,它只在这里用于“背景”。

当我在AddRangeMenuStrip.Items上出错并需要将ToolStripMenuItem转换为ToolStripItem时,我正在玩Windows窗体

但是我已经有一个AddRangeForm.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/

10-09 14:55