我在 F# 中实现了一个 C# 接口,它看起来像:
public interface IThings
{
Stream ThingsInAStream()
}
我的实现看起来像:
type FSharpThings() =
interface IThings with
member this.ThingsInAStream() =
let ms = new MemoryStream()
// add things to stream
ms
现在我收到消息:
The expression was expected to have type
Stream
but here has type
MemoryStream
我不明白 MemoryStream是一个流,我知道我可以将其转换为流,例如:
ms :> Stream
同样适用[|"string"|]
,IEnumerable<string>
它实现了接口,我可以显式地转换为它,但它不能自动工作。
为什么这行得通?
let things:(IEnumerable<'a> -> 'a) = (fun f -> f.First())
let thing= things([|"";""|])
这也是自动向上转换!