使用 F# Seq.cast 时出现意外的转换异常

问题描述 投票:0回答:1

C# 库

public class A
{
    public static implicit operator B(A a) => new B();
}

public class B
{
}

在此 F# 代码中使用

let someAs = [A(); A(); A()]

let someBs1 = someAs |> Seq.map (fun a -> A.op_Implicit(a)) |> List.ofSeq
let someBs2 = Seq.cast<B> someAs |> List.ofSeq //Unable to cast A to B

与我的预期相反,Seq.cast 未能使用隐式运算符。这是预期的吗?

c# casting f# implicit-conversion
1个回答
0
投票

隐式运算符是 C# 概念,并非 CLR 固有的,因此从 F# 的角度来看,

op_Implicit
只是一个常规方法。如果您自己不调用
op_Implicit
,F# 不会为您执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.