在逻辑上后者肯定应该排在后面,但是如果使用CompareTo(),因为第二个字符'月'比‘1’大,所以前者反而排在了后面。
请问有没有什么比较简单的方法来解决这样的问题?
我目前能想到的就是单独写一个方法MyCompare(string a, string b)来比较,但是这样感觉不够简练。

解决方案 »

  1.   

    没太懂你的意思,不知道是不是比较 "1月-2月","11月-12月"这类似的字符串代表的月份谁大 ??如果是的话 说个不太好的方法 用Replace可以替换“月”为“-” 再用 split("---")分割字符串,之后就可以比较了
      

  2.   

    哦 看错了 可以替换“月”为“” 再 分割 split("-")
      

  3.   

    如果说字符串之间比较的逻辑是自己定义的话,那么除了自己写方法之外,还能怎么办呢?。。
    .NET类库很强大也不可能强大到为每个人量身定做呀。。
    就这个问题的话,可以先过滤中文,然后获取其他有用信息,再一一比较。。
    先考虑能不能实现,实现之后再考虑简不简练。。
      

  4.   

    LZ  是指月份大 ? 还是什么啊    ~我不明白LZ的意思或者是"1月2日","11月12日"   ????????
      

  5.   

    如果LZ是想比较字符串大小的话你应该说明是比较字符串长度大小,还是比较ASCII码值,
    比较字符串长度用length方法就行,如果比较字符串的大小,则比较的是字符的ASCII编码的大小.你搜索一下ASCII码表就可以得知每一个ASCII字符的大小.在比较时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较,
    如果比较时间的大小的话我想因该有个年份吧,把它Convert成一个datatime类型的,然后去比较,这样就行了
      

  6.   


    public class SortModel
        {
            public string No
            {
                get;
                set;
            }        public string Date
            {
                get;
                set;
            }        public string Others
            {
                get;
                set;
            }        public SortModel(string no, string date, string others) 
            {
                this.No = no;
                this.Date = date;
                this.Others = others;
            }
        }public class SortByNoDate:IComparer<SortModel>
        {
            public int Compare(SortModel x, SortModel y)
            {
                if (x.No == y.No)
                {
                    return ComparePlus(x.Date,y.Date);
                }
                else 
                {
                    return x.No.CompareTo(y.No);
                } 
            }        private int ComparePlus(string x, string y) 
            {
                int tempX;
                int tempY;
                if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
                {
                    return x.CompareTo(y);
                }
                else if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 1), out tempY))
                {
                    return 1;
                }
                else if (int.TryParse(x.Substring(0, 1), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
                {
                    return -1;
                }
                else 
                {
                    return x.CompareTo(y);
                }
            }
        }
    static void Main(string[] args)
            {
                List<SortModel> modelList = new List<SortModel>();
                modelList.Add(new SortModel("200", "3月-4月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("100", "5月-6月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("200", "11月-12月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("300", "5月-6月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("200", "1月-2月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("100", "9月-10月", Guid.NewGuid().ToString()));            
                modelList.Add(new SortModel("300", "1月-2月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("300", "11月-12月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("100", "1月-2月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("200", "5月-6月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("100", "3月-4月", Guid.NewGuid().ToString()));
                modelList.Add(new SortModel("300", "3月-4月", Guid.NewGuid().ToString()));            modelList.Sort(new SortByNoDate());            WriteOut(modelList);
                //Console.WriteLine("1月-2月".Substring(0,2));            Console.ReadKey();
            }        private static void WriteOut(List<SortModel> list) 
            {
                foreach (SortModel model in list) 
                {
                    Console.WriteLine("OUT__________" + model.No + "," + model.Date + "," + model.Others);
                }
            }
      

  7.   

    如21楼所说,把比较类改成这样,好多了public class SortByNoDate:IComparer<SortModel>
        {
            public int Compare(SortModel x, SortModel y)
            {
                if (x.No == y.No)
                {
                    //return ComparePlus(x.Date,y.Date);
                    return int.Parse(x.Date.Split('月')[0]) - int.Parse(y.Date.Split('月')[0]);
                }
                else 
                {
                    return x.No.CompareTo(y.No);
                } 
            }        //private int ComparePlus(string x, string y) 
            //{
            //    int tempX;
            //    int tempY;
            //    if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
            //    {
            //        return x.CompareTo(y);
            //    }
            //    else if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 1), out tempY))
            //    {
            //        return 1;
            //    }
            //    else if (int.TryParse(x.Substring(0, 1), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
            //    {
            //        return -1;
            //    }
            //    else 
            //    {
            //        return x.CompareTo(y);
            //    }
            //}
        }
      

  8.   

    我最想问的是能不能override某个.NET类库提供的方法,比如compareTo之类的,而非自定义一个方法。