使用linq过滤掉列表

本文关键字:列表 过滤 linq 使用 | 更新日期: 2023-09-27 18:25:55

我有一个文件,我已经用列表行=File.ReadAllLines(路径).ToList();列表是这样的:

Remove lines here
...
BEGIN READ
X
Y
Z
END READ
more lines to remove
...

我想保持"BEGIN READ"answers"END READ"之间的部分不包括那些触发器。我该如何过滤掉这些行?

使用linq过滤掉列表

您可以使用Enumerable.SkipWhileTakeWhile来处理此问题:

var linesOfInterest = lines
                        .SkipWhile(l => l != "BEGIN READ")
                        .Skip(1)
                        .TakeWhile(l => l != "END READ");

这将返回这两个标记之间的行。额外的Skip(1)在那里跳过实际的"BEGIN READ"行本身。

var lines = File.ReadLines(fname)
                .SkipWhile(line => line != "BEGIN READ")
                .TakeWhile(line => line != "END READ")
                .Skip(1)
                .ToList();