Je suis en désaccord avec la réponse fournie. Cela fonctionne sûrement, mais je peux voir de sérieux problèmes, à commencer par la lisibilité. À mon avis, la lisibilité et la maintenabilité sont primordiales, et la solution acceptée ne suffira tout simplement pas. Ajoutant à cela, une approche plus générique résoudra également le problème pour IPv6, tandis que la solution acceptée ne fonctionnera pas.
Ma proposition est d'utiliser la méthode suivante:
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);
}
}
Placez le haut dans une classe statique visible, et la méthode ajouterUn fonctionnera comme une méthode d'extension à IPADDRESS. Cela facilite le travail avec, et vous n'exposerez pas les détails de l'implémentation de l'ajout à l'adresse IP dans votre classe, tout en conservant la lisibilité. Cela aura l'avantage supplémentaire de ne pas encombrer la classe que vous écrivez déjà avec des méthodes sans rapport possible.
Veuillez voter pour que les personnes qui viennent à cette question puissent le voir si vous êtes d'accord avec ma réponse et les raisons pour lesquelles je ne suis pas d'accord avec la question approuvée.
Pour le contexte, voir [cette question] (http://stackoverflow.com/questions/3482880/using-ip-address-component-c). –