2016-10-29 751 views
2

警告CS0618:'IPAddress.Address'已过时:'此属性已被弃用 。这是地址系列依赖。请使用 IPAddress.Equals方法执行比较。警告CS0618:'IPAddress.Address'已过时:'此属性已被弃用

将IP地址的八进制表示转换为无符号整数(包含在long中)。

public static long CastIp(string ip) 
{ 
    return (long)(uint)IPAddress.NetworkToHostOrder((int)IPAddress.Parse(ip).Address); 
} 

它给了我这个警告;在上面的代码中,如果没有IPAddress,我会做什么来完成同样的事情?

+0

你是用什么“长”的?你为什么要将数字转换为主机顺序?你为什么忽略IPv6? – Luaan

回答

3

documentationIPAddress.Address说:

此属性是过时的。使用GetAddressBytes。

所以我建议你这样做:

public static long CastIp(string ip) 
{ 
    IPAddress address = IPAddress.Parse(ip); 
    byte[] addressBytes = address.GetAddressBytes(); 
    // This restriction is implicit in your existing code, but 
    // it would currently just lose data... 
    if (addressBytes.Length != 4) 
    { 
     throw new ArgumentException("Must be an IPv4 address"); 
    } 
    int networkOrder = BitConverter.ToInt32(addressBytes, 0); 
    return (uint) IPAddress.NetworkToHostOrder(networkOrder); 
} 

这似乎给出相同的结果,在测试中,我已经尝试了...你应该检查它,你想要做虽然什么,因为它不清楚你的期望。

+0

谢谢,这很好:) – MLBdev

相关问题