题目:要求计算连续的IP地址。
举例:起始IP为192.168.2.2,IP总个数为3,那么要求得的所有IP的为192.168.2.2,192.168.2.3,192.168.2.4。再举个例子,起始IP为192.168.2.253,IP总个数为5那么要求得的所有IP为192.168.2.253,192.168.2.254,192.168.2.255,192.168.3.0,192.168.3.1。
按照传统的解法可以这么做:
1
2
3
4
5
6
7
8
9
10
11
12
13
<code>static</code> <code>void</code> <code>Main(</code><code>string</code><code>[] args)</code>
<code>{</code>
<code> </code><code>string</code> <code>ip = </code><code>"192.168.2.253"</code><code>;</code><code>//起始IP</code>
<code> </code><code>int</code> <code>count = 5;</code><code>//要计算连续IP的个数</code>
<code> </code>
<code> </code><code>var</code> <code>ipValue = BitConverter.ToUInt32(IPAddress.Parse(ip).GetAddressBytes().Reverse().ToArray(), 0);</code>
<code> </code><code>for</code> <code>(</code><code>uint</code> <code>i = 0; i < count; i++)</code>
<code> </code><code>{</code>
<code> </code><code>IPAddress newIp = IPAddress.Parse((ipValue + i).ToString());</code>
<code> </code><code>Console.WriteLine(newIp);</code>
<code> </code><code>}</code>
<code>}</code>
那如果我们用linq稍微改造一下,可以这么干:
14
15
16
<code> </code>
<code> </code><code>var</code> <code>newIps = </code><code>from</code> <code>p </code><code>in</code> <code>Enumerable.Range(0, count)</code>
<code> </code><code>let</code> <code>newIp = ipValue + p</code>
<code> </code><code>select</code> <code>new</code> <code>{ IP = IPAddress.Parse(newIp.ToString()) };</code>
<code> </code><code>foreach</code> <code>(</code><code>var</code> <code>newIp </code><code>in</code> <code>newIps)</code>
<code> </code><code>Console.WriteLine(newIp.IP);</code>
答案:
192.168.2.253
192.168.2.254
192.168.2.255
192.168.3.0
192.168.3.1
本文转自 guwei4037 51CTO博客,原文链接:http://blog.51cto.com/csharper/1348959