2017-01-10 182 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:很高興爲您效勞 –

相關問題