Я категорически не согласен с предоставленным ответом.Это, безусловно, работает, но я вижу серьезные проблемы с ним, начиная с читабельности.На мой взгляд, удобочитаемость и ремонтопригодность имеют первостепенное значение, и принятое решение просто не подойдет.В дополнение к этому, более общий подход также решит проблему для IPv6, в то время как принятое решение не будет работать.
Мое предложение состоит в том, чтобы использовать следующий метод:
public static IPAddress AddOne(this IPAddress ipAddress)
{
byte[] data = ipAddress.GetAddressBytes();
IncrementByOneFromRight(data, data.Length - 1);
return new IPAddress(data);
}
private static void IncrementByOneFromRight(byte[] data, int index)
{
if (index < 0)
return;
if (data[index] < byte.MaxValue)
data[index] += 1;
else
{
data[index] = 0;
IncrementByOneFromRight(data, index - 1);
}
}
Поместитевыше в видимом статическом классе, а метод AddOne будет работать как метод расширения для IPAddress.Это облегчает работу, и вы не будете раскрывать подробности реализации добавления IP-адреса в своем классе, сохраняя и читабельность.Это даст дополнительное преимущество: не засоряйте класс, который вы уже пишете, возможно, несвязанными методами.
Пожалуйста, проголосуйте, чтобы это было видно людям, приходящим на этот вопрос, если вы согласны с моим ответом и причинами, по которым яне согласен с утвержденным.