1

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

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() 比较“名称”而不是卡在键上?

4

5 回答 5

11

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

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

您可能还想检查是否null完整,除非您已经知道不会有任何内容,如本例所示。

于 2008-10-29T19:02:00.737 回答
3

nameList=nameList.OrderBy(li => li.Text).ToList();

于 2008-10-29T19:13:15.707 回答
1

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

编辑:据我所知,您必须指定一个 IComparer 才能使其正常工作,但不确定我是否完全理解您要执行的操作。

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

你应该能够拥有一个

List<string> auhtorNames;
authorNames.Sort();
ddl.DataSource = authorNames;
ddl.DataBind();
于 2008-10-29T18:55:31.687 回答
0

使用 ArrayList.Sort(IComparer) 而不是 ArrayList.Sort()。

于 2008-10-29T18:59:40.413 回答
0

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

于 2008-10-29T18:59:52.487 回答