C# - 当每个'row'有多个值时对列表进行排序?

时间:2008-10-29 18:49:30

标签: c# .net list sorting

异常:无法比较数组中的两个元素。

private void assignNames(DropDownList ddl, Hashtable names)
{
    List<ListItem> nameList = new List<ListItem>();
    if (ddl != null)
    {
        ddl.ClearSelection();
        ddl.Items.Add(new ListItem("Select Author"));
        foreach (string key in names.Keys)
        {
            nameList.Add(new ListItem(names[key].ToString(), key));

        }

    nameList.Sort();
}

那么如何使用Sort()来比较“名称”而不是卡在键上?

5 个答案:

答案 0 :(得分:11)

提供Comparison<T>来指示List如何对项目进行排序。

nameList.Sort(delegate(ListItem thisItem, ListItem otherItem) {
    return thisItem.Text.CompareTo(otherItem.Text);
});

您可能还想检查null是否完整,除非您已经知道不会有任何内容,例如在这种情况下。

答案 1 :(得分:3)

nameList = nameList.OrderBy(li =&gt; li.Text).ToList();

答案 2 :(得分:1)

什么类型的对象是“名字”?

编辑: 据我所知,你必须指定一个IComparer来实现这一点,不确定我是否完全理解你想要做的事情。

编辑: 这对于我“感觉”你的意图来说太复杂了,你基本上想要用一个排序的作者名列表填充一个下拉列表。

你应该能够拥有

List<string> auhtorNames;
authorNames.Sort();
ddl.DataSource = authorNames;
ddl.DataBind();

答案 3 :(得分:0)

使用ArrayList.Sort(IComparer)代替ArrayList.Sort()。

答案 4 :(得分:0)

ListItem不可比较。你可以改用System.Collections.Specialized.OrderedDictionary。