删除所有不包含LINQ特定字符串的行

时间:2017-01-10 03:02:36

标签: c#

我最初使用这个if语句检查一行是否包含字符串,并相应地删除它。

if (!currentFile[i].Contains("whattoremove"))
{
   currentFile[i] = "";
}
File.WriteAllLines(logPath, File.ReadAllLines(logPath).Where(l => !string.IsNullOrWhiteSpace(l)));

但是,这似乎很乏味,所以我尝试在LINQ中编写它

string[] currentFile = File.ReadAllLines(logPath).Where(l => string.Contains("whattoremove")

令我惊讶的是,似乎string.Contains并不存在于此。有没有办法使用LINQ来做到这一点?

1 个答案:

答案 0 :(得分:2)

您在查询中做了两件错误的事情,

  1. 您想删除/避免包含whattoremove的行,因此在where子句中您必须使用!,否则您将获得包含指定字词的行。
  2. 您的查询结果将为IEnumerable<string>,但无法将其分配给string[],因此您必须使用.ToArray()进行转换。
  3. 实际上Linq查询应该是这样的:

    string[] filteredLines = File.ReadAllLines(logPath).Where(l => !l.Contains("whattoremove")).ToArray();