8

这根本与 Windows 窗体无关,它仅用于“背景”。

AddRange当我在MenuStrip.Items要求强制ToolStripMenuItem转换时遇到错误时,我正在玩弄 Windows 窗体ToolStripItem

但我已经有一个AddRangefor aForm.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

问题就是为什么;从我的角度来看,这个电话并不模棱两可

4

1 回答 1

2

阅读14.4.3 F# 规范后(由Gustavo提示,向他致敬)

F# 编译器确定是否在显式实例化之后但在检查任何参数之前插入灵活性。

我知道对于具有重载的方法永远不会插入灵活性,因为它需要进行参数检查才能选择。

于 2016-07-07T12:55:01.363 回答