代码之家  ›  专栏  ›  技术社区  ›  scrot

C-当每个“行”有多个值时对列表进行排序?

  •  1
  • scrot  · 技术社区  · 17 年前

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

    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 回复  |  直到 16 年前
        1
  •  11
  •   bdukes Jon Skeet    17 年前

    提供一个 Comparison<T> 指导 List 关于如何对项目排序。

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

    您可能还需要检查 null 要完整,除非你已经知道不会有任何,就像在这个例子中一样。

        2
  •  3
  •   Jacob Adams    17 年前

    namelist=namelist.orderby(li=>li.text).tolist();

        3
  •  1
  •   Marcus King    17 年前

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

    编辑: 据我所知,您必须指定一个IComparer才能工作,但不确定我是否完全理解您试图做什么。

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

    你应该有一个

    List<string> auhtorNames;
    authorNames.Sort();
    ddl.DataSource = authorNames;
    ddl.DataBind();
    
        4
  •  0
  •   BQ.    17 年前

    使用arraylist.sort(IComparer)而不是arraylist.sort()。

        5
  •  0
  •   Jimmy    17 年前

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

    推荐文章