C # List <T>get вернуть отсортированный список - PullRequest
3 голосов
/ 31 августа 2010

То, что у меня есть, в основном:

public class Object{
    public bool IsObjectValid { set; get; }
}

public class MyThing{
    public List<Object> Objects { set; get; }
}

Что я хочу сделать:

public class ObjectsFiltered{
    public List<Object> ValidObjects{
        get{
            var list = LFs.Sort<_LF> where (IsObjectValid == true);
            return list;
        }
    }
}

Я знаю, что должен быть способ отсортировать Список, отфильтровавbool true / false.Кажется, я просто не могу полностью обернуть голову вокруг Линка.Я просто не могу найти учебник, который кричит "АХ ХА!"о Linq Lambda для меня: /

Я бы предпочел просто вернуть подмножество, только сохранить только один «объект» ... вместо моей текущей настройки нескольких наборов списков.KISS.

В конечном итоге я буду использовать переключатели bool для подачи TreeViews на свои формы WPF.

Уточнение: я думаю, что цель состоит в том, чтобы иметь один список (List Objects) ипара свойств, которые показывают отфильтрованную версию объектов.Вместо того чтобы иметь Objects, ObjecstValid, ObjectsInvalid, ObjectsSomeOtherRuleSet ... каждый из них представляет собой отдельный список ...

Я хотел бы иметь один список, чтобы управлять ими всеми ... и иметь свойства, которые возвращают изменениесписок, по желанию.

Ответы [ 3 ]

4 голосов
/ 31 августа 2010

Вы можете использовать LINQ:

public IEnumerable<Object> ValidObjects{ 
    get{ 
        return LFs.Where(item => item.IsObjectValid)
                  .OrderBy(item => item.SomeProperty); 
    } 
} 

Если вам не нужно a List<T>, лучше вернуть IEnumerable<T>, чтобы не хранить все это в-memory.

Лямбда-выражение item => item.SomeProperty является встроенной функцией, которая принимает параметр с именем item и возвращает item.SomeProperty.(Тип параметра и возвращаемый тип выводятся компилятором)

0 голосов
/ 31 августа 2010
 LFs.Where(x => x.IsObjectValid).ToList().Sort()

Для сортировки используется сравнение по умолчанию.В противном случае

 LFs.Where(x => x.IsObjectValid).OrderBy(x => x.PropertyToSortBy).ToList(); 
0 голосов
/ 31 августа 2010

Чтобы отфильтровать ваши объекты, вы можете просто вернуть:

return LFs.Where(x => x.IsObjectValid).ToList();

Обратите внимание, однако, что если вы собираетесь часто использовать эту функцию, вы можете увидеть некоторое повышение производительности, поддерживая предварительно отфильтрованный списоквнутри.

...