如何用C# LINQ移除字符串中指定列表的所有子串?
最优LINQ查询实现方案
首先咱们明确核心需求:整词移除指定列表中的所有单词,同时保证最终字符串的空格格式干净(不会出现多余连续空格)。
实现代码
string originalString = "String must be replaced for all the occurrences found in the replace string"; HashSet<string> stringToRemoveSet = new HashSet<string> { "to", "be", "in", "the", "for", "all" }; string result = string.Join(" ", originalString.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .Where(word => !stringToRemoveSet.Contains(word)));
为什么这是最优解?
- 用HashSet替代List存移除词:
HashSet的Contains方法是O(1)时间复杂度,比List的O(n)快得多,当移除列表规模变大时,性能优势会非常明显。 - Split时移除空条目:避免原始字符串里可能存在的多个连续空格拆分出空字符串,确保过滤后的结果没有无效项,拼接出来的字符串不会有多余空格。
- LINQ链式调用:代码简洁直观,符合C#函数式编程的风格,同时兼顾了性能和可读性。
验证结果
运行这段代码后,得到的结果完全符合你的预期:
String must replaced occurrences found replace string
注:这个方案是基于整词匹配的逻辑,如果你的需求是移除任意子串(非整词),那需要调整实现,但从你的示例来看,整词匹配完全贴合需求。
内容的提问来源于stack exchange,提问作者Lavanya




