Как я могу сравнить два IP-адреса?
string ip1 = "123.123.123.123";
string ip2 = "124.124.124.124";
Мне нужно, некоторым нравится это:
if(ip1 == ip2)
{
//true
}
Кажется, System.Net.IPAddress определяет собственное переопределение Equals, так что это должно работать:
IPAddress ip1 = IPAddress.Parse("123.123.123.123");
IPAddress ip2 = IPAddress.Parse("124.124.124.124");
if(ip1.Equals(ip2))
{
//...
}
Тип IPAddress
в BCL поддерживает равенство и может использоваться для этой цели.
public static bool IsSameIPAddress(string ip1, string ip2) {
IPAddress leftIP = IPAddress.Parse(ip1);
IPAddress rightIP = IPAddress.Parse(ip2);
return leftIP.Equals(rightIP);
}
Некоторые люди задавались вопросом, почему простого сравнения строк недостаточно. Причина в том, что IP-адрес может быть юридически представлен как в десятичной системе счисления, так и в шестнадцатеричной системе счисления. Таким образом, один и тот же IP-адрес может иметь более одного строкового представления.
Например
var left = "0x5.0x5.0x5.0x5";
var right = "5.5.5.5";
IsSameIPAddress(left,right); // true
left == right; // false
Класс IPAddress
(System.Net) имеет переопределенный метод Equals, который сравнивает адреса, а не экземпляры объектов, как вам нужно. Сравнение строк здесь может быть опасным, поскольку IP-адреса могут иметь более одного строкового представления.
http://msdn.microsoft.com/en-us/library/system.net.ipaddress .equals% 28v = VS.71% 29.aspx
IPAddress.Parse(ip1).Equals(IPAddress.Parse(ip2))
IPAddress addr1 = IPAddress.Parse(ip1);
IPAddress addr2 = IPAddress.Parse(ip2);
return (addr1.Equals(addr2));
Ознакомьтесь с методом Equals на ] System.Net.IPAddress