首页 > 解决方案 > 在不需要函数的上下文中使用 F# 扩展

问题描述

嗨,我在 f# 中有一个扩展方法,它检查 TcpClinet 是否已连接,它是相当简单的代码:

[<Extension>]
type TcpExtension() =
    [<Extension>]
    static member inline IsConnectionEstablished(client: TcpClient) : bool = 
       let ipProperties : IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties()
       let tcpConnection : Option<TcpConnectionInformation> = ipProperties.GetActiveTcpConnections() |> Seq.tryFind(fun connection -> connection.LocalEndPoint.Equals(client.Client.LocalEndPoint) && connection.RemoteEndPoint.Equals(client.Client.RemoteEndPoint))

       match tcpConnection with
         | Some connection -> true
         | None -> false

现在我试图通过简单的方式使用它:

let private WaitForData (client : TcpClient) = 
    let isConnectionAlive : bool = client.IsConnectionEstablished
    isConnectionAlive

但我收到的消息如下:

此函数接受太多参数,或在不期望函数的上下文中使用

当我检查 Microsoft 文档时,这就是他们应该如何处理它,我在这里缺少什么?

标签: f#

解决方案


错误消息有点误导,你实际上错过了一个论点

要调用你需要传入的函数,unit就像你从 C# 调用它一样

let isConnectionAlive : bool = client.IsConnectionEstablished()

推荐阅读