我试图调用一个.NET方法接受IEnumerable<T>来自F#的泛型,使用seq<U>U是T的子类.这不会像我预期的那样工作:
使用以下简单的打印机:
let printEm (os: seq<obj>) =
for o in os do
o.ToString() |> printfn "%s"
Run Code Online (Sandbox Code Playgroud)
这些是我得到的结果:
Seq.singleton "Hello World" |> printEm // error FS0001;
//Expected seq<string> -> 'a but given seq<string> -> unit
Seq.singleton "Hello World" :> seq<obj> |> printEm // error FS0193;
//seq<string> incompatible with seq<obj>
Seq.singleton "Hello World" :?> seq<obj> |> printEm // works!
Seq.singleton 42 :> seq<obj> |> printEm // error FS0193
Seq.singleton 42 :?> seq<obj> |> printEm // runtime InvalidCastException!
//Unable …Run Code Online (Sandbox Code Playgroud)