C# 是否有其他方法编写此if代码?

C# 是否有其他方法编写此if代码?,c#,if-statement,C#,If Statement,我刚开始学c。我最喜欢if和if-else。现在我正在开发一个程序,它在其中写入一个IP地址,我需要键入正确的子网,以及所有这些。使用if和elseif编写代码需要很长的时间,所以我想知道是否有更快的方法 Random r = new Random(); int randomip = r.Next(256); int secondip = r.Next(256); int subnetip = r.Next(24, 31);

我刚开始学c。我最喜欢if和if-else。现在我正在开发一个程序,它在其中写入一个IP地址,我需要键入正确的子网,以及所有这些。使用if和elseif编写代码需要很长的时间,所以我想知道是否有更快的方法

Random r = new Random();
            int randomip = r.Next(256);
            int secondip = r.Next(256);
            int subnetip = r.Next(24, 31);
            int numbers = subnetip;

Console.WriteLine("192.168." + randomip + "." + secondip + "/" + subnetip);

            Console.Write("Type the correct netID: ");
            Console.ReadLine();
            Console.Write("Type the correct subnet: ");
            Console.ReadLine();


            if (numbers == 24)
            {
                Console.WriteLine("correct netID is: 192.168." + randomip + 
                "." + secondip / 256);
                Console.WriteLine("correct subnet is: 255.255.255.0");
            } else if (numbers == 25)
            {
                Console.WriteLine("correct netID is: 192.168." + randomip + 
                "." + secondip / 128);
                Console.WriteLine("correct subnet is: 255.255.255.128");
            } else if (numbers == 26)

等等……还有其他数字。难道没有一个更快更简单的方法让它工作吗?它是有效的,但是如果我想添加更多的数字,那就有问题了如果你向后想,这些是基于数字值的除数

换句话说,它们是一个递增数字的二次幂

31 => 2^1
30 => 2^2
29 => 2^3
28 => 2^4
27 => 2^5
26 => 2^6
25 => 2^7
24 => 2^8
换句话说,2是32减数的幂

换句话说,

var divisor = Math.Pow(2, 32-numbers);
var subnet = 256 - divisor;
最多4条线路,不带开关或if。耶


如果你向后想,这些是基于数字值的除数

换句话说,它们是一个递增数字的二次幂

31 => 2^1
30 => 2^2
29 => 2^3
28 => 2^4
27 => 2^5
26 => 2^6
25 => 2^7
24 => 2^8
换句话说,2是32减数的幂

换句话说,

var divisor = Math.Pow(2, 32-numbers);
var subnet = 256 - divisor;
最多4条线路,不带开关或if。耶


这里是什么样的模式让你一次256次,一次128次…你可以使用…这里是什么模式让你一次256次,一次128次…你可以使用。。。
Console.WriteLine("correct netID is: 192.168." + randomip + "." + secondip / divisor);
Console.WriteLine("correct subnet is: 255.255.255." + subnet);