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# 概念,并非 CLR 固有的,因此从 F# 的角度来看,
op_Implicit
只是一个常规方法。如果您自己不调用 op_Implicit
,F# 不会为您执行此操作。