C# List<T>获取并返回已排序列表。

3

我所拥有的基本上是:

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。我找不到一个关于Linq Lambda的教程让我恍然大悟 :/
我宁愿只返回子集,只保留一个“对象”...而不是我的当前设置中有多个列表集合。简单易行。
最终,我将使用布尔开关来填充WPF表单上的TreeView。
澄清一下:我认为目标是拥有一个列表(List Objects)和几个属性,显示对象的过滤版本。而不是像Objects、ObjecstValid、ObjectsInvalid、ObjectsSomeOtherRuleSet这样,每个都是不同的列表...
我希望只有一个列表来统治它们所有...并且有属性返回所需的变化列表。

我认为你的问题不是很清楚。你所说的“sort out”和“filtering out the bool true/false”是什么意思? - Mark Byers
就像...我有原始的List<Object>对象。我想要一个属性,输出Objects.IsObjectValid == true。IsValid布尔值内部包含逻辑来确定对象是否正确设置。如果为true,则显示在次要的List中。 - WernerCD
3个回答

6

您可以使用LINQ:

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

除非您需要使用 List<T>,否则最好返回一个 IEnumerable<T>,这样就不会将所有内容都存储在内存中。

item => item.SomeProperty 是一个内联函数,它接受一个名为item的参数,并返回item.SomeProperty。(参数和返回类型由编译器推断)


我认为这就是我正在寻找的东西。我在其他问题中看到过类似的设置,只是很难将它们组合起来。一旦我弄清楚为什么XAML现在在对我大喊大叫,我会回报的。 - WernerCD
请注意,Sort()OrderBy()由于底层使用不同的算法,可能会产生不同的结果。 - Albert Mosiałek

0

为了筛选您的对象,您可以简单地返回:

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

请注意,如果您打算经常使用该函数进行绘图,则通过在内部维护预过滤列表,您可能会看到一些性能提升。

-2
 LFs.Where(x => x.IsObjectValid).ToList().Sort()

使用默认比较进行排序。否则

 LFs.Where(x => x.IsObjectValid).OrderBy(x => x.PropertyToSortBy).ToList(); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接