IPEndpoint必须上传吗?为什么?

时间:2017-04-18 19:50:32

标签: .net sockets f# dns

let test_smtp (smtp_server_address : string) (port : int) =
    let hostEntry : IPHostEntry = Dns.GetHostEntry(smtp_server_address)
    let endPoint : IPEndPoint = new IPEndPoint (hostEntry.AddressList[0], port)
    ( use tcpSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp) 
      tcpSocket.Connect(endPoint)
    )

在上面的不完整代码段中,

let endPoint : IPEndPoint = new IPEndPoint (hostEntry.AddressList[0], port)

生成两个错误。第一个表示无法找到合适的重载方法。

我之前没见过的第二个错误是

This value is not a function and cannot be applied.

我通过将一个单独的let语句分配给IPAddress,并将错误映射到该行(未包含在上面的示例中),将其隔离到hostEntry.AddressList[0]

我看过一些关于F#无法上传的文章,但我仍然对为什么会出现这种错误感到困惑。

1 个答案:

答案 0 :(得分:3)

正如kvb在评论中所说的那样

a[0]

表示“将a视为应用于仅包含零”的单个参数列表的函数。

你想要

a.[0]

获取数组a的零索引元素。

一旦你解决了这个问题,类型推断将适用于重载解析而不需要强制转换等等。