Исключение: не удалось сравнить два элемента в массиве.
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 (), чтобы сравнивать «имена» и не зацикливаться на ключе?





какой тип объекта "имена"?
Обновлено: Из того, что я могу сказать, вам нужно будет указать IComparer, чтобы это работало, хотя я не уверен, полностью ли я понимаю, что вы пытаетесь сделать.
Обновлено: Это слишком сложно для того, что я «чувствую» в вашем намерении, вы в основном хотите заполнить раскрывающийся список отсортированным списком имен авторов.
вы должны иметь
List<string> auhtorNames;
authorNames.Sort();
ddl.DataSource = authorNames;
ddl.DataBind();
Используйте ArrayList.Sort (IComparer) вместо ArrayList.Sort ().
ListItem несовместим. вместо этого вы можете использовать System.Collections.Specialized.OrderedDictionary.
Предоставьте Comparison<T>, чтобы проинструктировать List о том, как сортировать элементы.
nameList.Sort(delegate(ListItem thisItem, ListItem otherItem) {
return thisItem.Text.CompareTo(otherItem.Text);
});
Вы также можете проверить комплектность null, если вы еще не знаете, что ее не будет, как в данном случае.
Просто любопытно, как бы вы это сделали в VB.NET?
nameList.Sort (Функция (thisItem как ListItem, другойItem как ListItem) возвращает ...)
Однако в лямбда-синтаксисе VB нет Return. Это просто Function(x, y) x.Text.CompareTo(y.Text) - и вам не нужны типы для аргументов, как они выводятся.
nameList = nameList.OrderBy (li => li.Text) .ToList ();
Вы также можете использовать лямбда-выражение вместо анонимного делегата, если хотите и можете использовать .NET 3.5.