我有一个集合,其中每个元素都有一个名为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中实现这一点?
答案 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);
}