使用字符串

时间:2016-11-05 12:46:09

标签: c# iequalitycomparer

我有以下列表:

var ips = new List<string> {
    "192.168.5.1",
    "192.168.0.2",
    "192.168.0.3",
    "192.168.0.4",
    "192.168.1.1",
    "192.168.1.2",
    "192.168.1.3",
    "192.168.1.4"
}.OrderBy(p => p.Ip);

看起来它有效,是否有必要编写自定义比较器,如this one

public class MyComparer : IComparer<string>
{
        public int Compare(string x, string y)
        {
            int ip1 = IPAddress.Parse(x).ToInteger();
            int ip2 = IPAddress.Parse(y).ToInteger();
            return (((ip1 - ip2) >> 0x1F) | (int)((uint)(-(ip1 - ip2)) >> 0x1F));
        }
 }

1 个答案:

答案 0 :(得分:0)

试试这个例子。

192.168.0.1
192.168.0.2
192.168.0.10
192.168.0.200

如果你申请OrderBy,它会给你这个结果。

192.168.0.1
192.168.0.10
192.168.0.2
192.168.0.200

所以你必须制作自己的自定义比较器,如下例所示。

Wrong Image