【问题标题】:Remove All Lines That Don't Contains specific string With LINQ使用 LINQ 删除所有不包含特定字符串的行
【发布时间】:2017-01-10 11:15:36
【问题描述】:

我最初是使用这个 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 来做到这一点?

【问题讨论】:

  • 原代码并没有删除该项,只是将其设置为一个空字符串。这是你想做的吗?
  • 我最初所做的是将其设置为空字符串,并在最后使用 LINQ 删除所有添加的空格。我试图这样做的原因是因为它看起来更有效。我现在对问题进行了编辑以使其更清楚
  • 好的,无论哪种情况,string.Contains 都是实例方法,而不是静态方法,因此在第二个示例中,您必须像这样使用它:l.Contains("whattoremove")
  • stackoverflow.com/questions/21055423/… 可以帮助你获得灵感

标签: c#


【解决方案1】:

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

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

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

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

【讨论】:

  • 非常感谢!您的解决方案不仅有效,而且我今天学到了一些新东西:D
  • @Reloaded : 很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2020-07-27
  • 1970-01-01
  • 2011-09-05
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多