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); });