0

我是 linq 的新手,想用它来获取 iOS 设备的 IP 地址。我想知道是否有人看到这种方法有任何问题(基于这个How do I get the network interface and its right IPv4 address?)或者是否有更好/更紧凑/更干净的方法来做到这一点。

  // get my IP
  string ip = NetworkInterface.GetAllNetworkInterfaces()
    .Where(x => x.Name.Equals("en0"))
      .Select(n => n.GetIPProperties().UnicastAddresses)
      .Where(x => x.First().Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
      .Select(x => x.First().Address.ToString());
4

2 回答 2

2

我认为您的代码的问题在于最后一个Select. 选择Where器已经返回一个IEnumerable,这意味着此时你有一个IEnumerableof UnicastIPAddressInformationCollection。然后在这一点上,只需选择第一个并指向地址属性并使用以下方法转换为字符串:.First().Address.ToString()

这是一个为我完成这项工作的示例:

public string IpEndPoint
    {
        get
        {
            return NetworkInterface.GetAllNetworkInterfaces()
           .Where(ni => ni.Name.Equals("en0"))
           .First().GetIPProperties().UnicastAddresses
           .Where(add => add.Address.AddressFamily == AddressFamily.InterNetwork)
           .First().Address.ToString();
        }
    }
于 2016-08-30T16:37:48.123 回答
1

只选择.First().Address一次:

string ip = NetworkInterface
               .GetAllNetworkInterfaces()
               .Where(x => x.Name.Equals("en0"))
               .Select(n => n.GetIPProperties().UnicastAddresses.First().Address)
               .Where(x => x.AddressFamily == AddressFamily.InterNetwork);
于 2013-07-24T20:13:32.360 回答