2010-02-16 4 views
0

У меня есть список объектов, в которых объект имеет 2 атрибута: id и name. Я должен заказать список по названию объектовЗаказать список объектов

Как это сделать?

+2

Немного больше информации на объекте было бы полезно. –

ответ

1

Linq является излишним для этого, когда есть встроенные методы для этого.

Если вы имеете в виду массив, просто использовать Array.Sort:

Array.Sort(items, (x, y) => x.Name.CompareTo(y.Name)); 

Если вы имеете в виду List<T>, используйте Sort функцию там:

items.Sort((x, y) => x.Name.CompareTo(y.Name)); 
+0

+1 для использования встроенной поддержки списка для сортировки, а не для выхода в Linq (не в том, что с Linq нет ничего плохого, но в этом случае это чрезмерное IMHO и не дает никакой большей ясности цели) –

+1

Верно об использовании встроенной поддержки, но, как кто-то сказал, что он не заботится о нулевых случаях ... Теперь вы можете изменить приведенное выше, чтобы позаботиться об этих случаях, но затем код уже не так чист. то его выбор между простым orderby и выше с нулевой проверкой ... Я нахожусь на заборе, что лучше в этом случае ... – anthonyv

+0

@anthonyv - все справедливые точки. И да - он потеряет часть своей краткости после того, как вы положили нулевую регистрацию. Тем не менее - приятно видеть, что люди кладут на стол несколько разных решений. –

4

Вы пытались использовать linq?

using System.Collections.Generic; 
using System.Linq; 

namespace Demo 
{ 
    public class Test 
    { 
     public void SortTest() 
     { 
      var myList = new List<Item> { new Item { Name = "Test", Id = 1 }, new Item { Name = "Other", Id = 1 } }; 
      var result = myList.OrderBy(x => x.Name); 
     } 
    } 

    public class Item 
    { 
     public string Name { get; set; } 
     public int Id { get; set; } 
    } 
} 
1

Если вы имеете дело со списком этих объектов , самым простым способом является сравнение Сравнение метода Сорта:

var list = new List<MyObject>(); 
... 
list.Sort((item1, item2) => item1.Name.CompareTo(item2.Name)); 

(Над образцом не выполняется проверка нулевого имени)

Это хорошо и просто, потому что строка реализует IComparable<string>. Альтернативой было бы для вас реализовать IComparable<MyObject> на классе, а затем вы можете просто позвонить list.Sort()

0

Способ по List<T> класса Sort имеет перегрузку, которая принимает пользовательские сравнения:

list.Sort((x,y) => x.Name.CompareTo(y.Name)); 
Смежные вопросы