C# List<T> get 返回一个排序列表

Wer*_*rCD 3 c# linq list c#-4.0

我所拥有的基本上是:

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

public class MyThing{
    public List<Object> Objects { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

我想做的事:

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

我知道必须有一种方法来整理列表,过滤掉布尔真/假。我似乎无法完全理解 Linq。我似乎无法找到一个尖叫“啊哈!”的教程。关于 Linq Lambda 给我:/

我宁愿只返回一个子集,只保留一个“对象”活着......而不是我当前设置的多组列表。吻。

最终,我将使用 bool-toggles 在我的 WPF 表单上提供 TreeViews。

澄清:我认为目标是有一个列表(列表对象)和几个显示对象的过滤版本的属性。而不是拥有 Objects、ObjecstValid、ObjectsInvalid、ObjectsSomeOtherRuleSet……每个都有一个不同的 List……

我希望有一个列表来统治所有这些……并根据需要具有返回列表中的变体的属性。

SLa*_*aks 5

您可以使用 LINQ:

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

除非您需要a List<T>,否则最好返回 an IEnumerable<T>,这样您就不会将其全部存储在内存中。

lambda 表达式item => item.SomeProperty是一个内联函数,它接受一个被调用的参数item并返回item.SomeProperty。(参数和返回类型由编译器推断)