Linq to Objects:TakeWhileOrFirst

asg*_*las 4 c# linq-to-objects

使用linq将以下内容应用于序列的最可读方式是什么:

TakeWhile elements are valid but always at least the first element
Run Code Online (Sandbox Code Playgroud)

编辑:我更新了标题,更准确.我很抱歉有任何困惑,下面的答案肯定教会了我一些东西!

预期的行为是:Take while元素有效.如果结果是空序列,则无论如何都要取第一个元素.

Bot*_*000 5

我认为这使得意图非常明确:

things.TakeWhile(x => x.Whatever).DefaultIfEmpty(things.First());
Run Code Online (Sandbox Code Playgroud)

我之前的,更详细的解决方案:

var query = things.TakeWhile(x => x.Whatever);
if (!query.Any()) { query = things.Take(1); }
Run Code Online (Sandbox Code Playgroud)