C# 列表排序不正确
我有以下代码C# 列表排序不正确,c#,list,sorting,C#,List,Sorting,我有以下代码 List<TimeZoneInfo> timeZoneList = new List<TimeZoneInfo>(TimeZoneInfo.GetSystemTimeZones()); timeZoneList.Sort((item1, item2) => { return string.Compare(item2.Id, item1.Id); }); List timeZoneList=新列表(TimeZoneInfo.GetSystemTimeZ
List<TimeZoneInfo> timeZoneList = new List<TimeZoneInfo>(TimeZoneInfo.GetSystemTimeZones());
timeZoneList.Sort((item1, item2) => { return string.Compare(item2.Id, item1.Id); });
List timeZoneList=新列表(TimeZoneInfo.GetSystemTimeZones());
timeZoneList.Sort((item1,item2)=>{return string.Compare(item2.Id,item1.Id);});
但它并没有对列表进行正确排序。(使用linq.OrderBy()会产生相同的结果)。但是下面的代码排序正确
List<string> timeZoneList1 = new List<string>();
foreach (TimeZoneInfo timeZoneInfo in TimeZoneInfo.GetSystemTimeZones())
timeZoneList1.Add(timeZoneInfo.Id);
timeZoneList1.Sort((item1, item2) => { return string.Compare(item1, item2); });
List timeZoneList1=新列表();
foreach(TimeZoneInfo.GetSystemTimeZones()中的TimeZoneInfo TimeZoneInfo)
timeZoneList1.Add(timeZoneInfo.Id);
timeZoneList1.Sort((item1,item2)=>{return string.Compare(item1,item2);});
有什么问题?我错过了什么
真的吗?没有人知道答案 ---------------------------编辑--------------------
其中,当我将列表分配给组合框时,它将以错误的顺序出现,但当我设置组合框的DisplayMember时,它将被修复。有人能解释这种行为吗 您已在比较函数中交换了项1和项2的顺序。您已在比较函数中交换了项1和项2的顺序。在第一个示例中,您有以下行:
timeZoneList.Sort((item1, item2) => { return string.Compare(item2.Id, item1.Id); });
如果不是:
timeZoneList.Sort((item1, item2) => { return string.Compare(item1.Id, item2.Id); });
您在
字符串中有项ID。在第一个示例中,请以错误的方式比较方法。在第二个示例中,它们是正确的,这就是为什么排序正确。在第一个示例中,您有以下行:
List<string> timeZoneList1 = new List<string>();
foreach (TimeZoneInfo timeZoneInfo in TimeZoneInfo.GetSystemTimeZones())
timeZoneList1.Add(timeZoneInfo.Id);
timeZoneList1.Sort((item1, item2) => { return string.Compare(item1, item2); });
timeZoneList.Sort((item1, item2) => { return string.Compare(item2.Id, item1.Id); });
如果不是:
timeZoneList.Sort((item1, item2) => { return string.Compare(item1.Id, item2.Id); });
您在字符串中有项ID。在第一个示例中,请以错误的方式比较方法。在第二个例子中,它们是正确的,这就是为什么排序正确。我不这么认为。请添加代码并查看结果。那解决办法是什么?我不这么认为。请添加代码并查看结果。那么解决方案是什么呢?至少它应该将列表顺序颠倒,也就是说,当它将列表顺序完全散列时。(请阅读编辑后的问题)至少它应该将列表顺序颠倒,也就是说,它将列表顺序完全散列。(请阅读编辑后的问题)
List<string> timeZoneList1 = new List<string>();
foreach (TimeZoneInfo timeZoneInfo in TimeZoneInfo.GetSystemTimeZones())
timeZoneList1.Add(timeZoneInfo.Id);
timeZoneList1.Sort((item1, item2) => { return string.Compare(item1, item2); });