如何在第一次出现后选择列表中的所有内容?

时间:2013-11-20 20:26:49

标签: c# linq

我有一个集合,其中每个元素都有一个名为IsTop的属性。我想要做的是使用linq(如果可能的话)在第一次出现IsTop == true之后选择所有内容。现在,我这样做:

bool[] foundTop = {false}; // use array for modified closure
foreach (var config in fullHierarchy
    .Where(config => config.IsTop || foundTop[0]))
{
    foundTop[0] = true;
    configurationHierarchy.Add(config);
}

我觉得这有点做作。有没有更简单的方法在LINQ中实现这一点?

3 个答案:

答案 0 :(得分:12)

您可以使用以下内容:

var afterTop = fullHierarchy.SkipWhile(x => !x.IsTop).Skip(1);

SkipWhile会跳过所有元素,直到找到IsTop == true的第一个项目,然后Skip才会跳过该元素。结果将是fullHierarchy 之后的所有项目 IsTop == true的第一个项目。

答案 1 :(得分:5)

试试这个:

var result = fullHierarchy.SkipWhile(x=>!x.IsTop).Skip(1);

答案 2 :(得分:4)

我认为SkipWhile正是您所寻找的,例如

var myArray = new[]
{
    new { IsTop = false, S = 'a' },
    new { IsTop = true, S = 'b' },
    new { IsTop = false, S = 'c' },
};
myArray.SkipWhile(x => !x.IsTop); // contains the elements with 'b' and 'c'

// in your code, might be
foreach (var config in fullHierarchy.SkipWhile(x => !x.IsTop))
{
    configurationHierarchy.Add(config);
}