我们可以使用 C# 通用字典。
我们创建一个包含 IP 范围的类。此类将充当字典的键。
class IP_Range
{
public int MinIP { get; set; }
public int MaxIP { get; set; }
}
然后我们必须创建一个比较器类,它有助于比较字典的键。
class IP_RangeComparer : IEqualityComparer<IP_Range>
{
public bool Equals(IP_Range r1, IP_Range r2)
{
return (r1.MinIP == r2.MinIP && r1.MaxIP == r2.MaxIP);
}
public int GetHashCode(IP_Range r)
{
return r.MinIP.GetHashCode();
}
}
然后我们可以创建一个通用字典并如下使用它:
IDictionary<IP_Range, string> myCache = new Dictionary<IP_Range, string>(new IP_RangeComparer());
// Adding entries
myCache.Add(new IP_Range() { MinIP = 100, MaxIP = 110 }, "A");
myCache.Add(new IP_Range() { MinIP = 111, MaxIP = 168 }, "B");
myCache.Add(new IP_Range() { MinIP = 169, MaxIP = 200 }, "C");
// Reading the dictionary
string city = myCache[new IP_Range() { MinIP = 169, MaxIP = 200 }];
请参阅这篇文章以获得进一步的解释。
注意:要找出您正在搜索的特定 IP 的密钥,您必须遍历 myCache.Keys 集合。