C # - сортировка списка, когда у него есть более одного значения в строке? - PullRequest
1 голос
/ 29 октября 2008

Исключение: не удалось сравнить два элемента в массиве.

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 ]

11 голосов
/ 29 октября 2008

Предоставьте Comparison<T> для указания List о том, как сортировать элементы.

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

Вы также можете проверить, чтобы null был завершен, если вы уже не знаете, что их не будет, как в этом случае.

3 голосов
/ 29 октября 2008

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

1 голос
/ 29 октября 2008

к какому типу объектов относятся "имена"?

EDIT: Из того, что я могу сказать, вам придется указать IComparer, чтобы это работало, хотя я не уверен, полностью ли я понимаю, что вы пытаетесь сделать.

EDIT: Это слишком сложно для того, что я «чувствую», что вы намерены, вы в основном хотите заполнить выпадающий список отсортированным списком имен авторов.

вы должны иметь возможность

List<string> auhtorNames;
authorNames.Sort();
ddl.DataSource = authorNames;
ddl.DataBind();
0 голосов
/ 29 октября 2008

ListItem не является сопоставимым. вместо этого вы можете использовать System.Collections.Specialized.OrderedDictionary.

0 голосов
/ 29 октября 2008

Используйте ArrayList.Sort (IComparer) вместо ArrayList.Sort ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...