2017-01-10 133 views
2

我最初使用此if语句来检查一行是否包含字符串,并相应地删除它。删除LINQ中不包含特定字符串的所有行

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来做到这一点?

+0

原来的代码不会删除的项目,只将其设置为空字符串。那是你想要做的吗? – vesan

+0

我最初的工作是将其设置为空字符串,并在末尾使用LINQ删除所有添加的空白。我试图这样做的原因是因为它看起来更有效率。我现在编辑了这个问题,以便更清楚地说明 – Reloaded

+0

好吧,在任何情况下,'string.Contains'都是一个实例方法,而不是静态方法,所以在第二个示例中,您必须像这样使用它:'l .contains(“whattoremove”)' – vesan

回答

2

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

  1. 你想删除/避免包含whattoremove线,所以在where子句中你必须使用!否则你将得到包含指定的行话。
  2. 查询的结果将会是IEnumerable<string>,这不能指定给string[],因此您必须使用.ToArray()来转换它们。

其实LINQ查询应该是这样的:

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

非常感谢!您的解决方案不仅适用,而且今天我学到了新的东西:D – Reloaded

+0

@Reloaded:很高兴为您效劳 –

相关问题