相关疑难解决方法(0)

F#和界面协方差:该怎么办?(特别是seq <> aka IEnumerable <>)

我试图调用一个.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)

ienumerable f# casting covariance

12
推荐指数
2
解决办法
2872
查看次数

标签 统计

casting ×1

covariance ×1

f# ×1

ienumerable ×1