2015-09-23 2 views
2

Я занимаюсь некоторыми упражнениями на Unity/C#, и для одного из них у меня есть список, содержащий некоторые унаследованные классы.Сортировка списка по классуName Алфавитный порядок

public List<Item> items = new List<Item>(); 

каждый элемент является наследственным классом, как PowerUp, концепт-арт, бонус, который все iherit от п ...

Я хотел бы, что-то список, используя имя класса элемента.

В принципе, если у меня есть список

myList = { Bonus,ConceptArt, PowerUp, PowerUp,ConceptArt } 

если сортировать его, то выход будет:

myList = { Bonus,ConceptArt, ConceptArt, PowerUp,PowerUp} 

Как я могу это сделать?

Я не знаю, ясно ли я объяснил. Если мне нужно изменить, скажите :)

ТНХ :)

+2

'myList = myList.OrderBy (item => item.Name) .ToList()' или что-то подобное? –

+0

Вы не можете легко отсортировать имя переменной, но –

+0

http://stackoverflow.com/questions/3309188/how-to-sort-a-listt-by-a-property-in-the-object –

ответ

2

Попробуйте это:

items = items.OrderBy(x => x.GetType().Name).ToList(); 
+0

Я делаю, может быть, что-то плохое, но похоже, что myList.orderBy не существует в Unity. – Crocsx

+0

Как это связано с Единством? –

+0

Убедитесь, что вы импортировали пространство имен System.Linq в начале вашего файла C#. Например. 'using System.Linq;' –

2

Для сортировки в месте, не создавая список из нового:

myList.Sort((Comparison<Item>) 
    ((left, right) => String.Compare(left.GetType().Name, right.GetType().Name))); 

Для проверки/испытания:

String report = String.Join(", ", myList 
    .Select(item => item.GetType().Name)); 

    Console.Write(report); 
Смежные вопросы